文章摘要
作者分享了过去一年开发音乐学校管理应用InstruxMusic的经历。该应用使用纯JavaScript构建,包含排课、计费、视频教学、文件共享、品牌页面构建和仪表盘等功能,旨在减少Web技术中人为复杂性带来的困扰。
文章总结
好的,这是根据您的要求,对原文进行中文重述后的版本:
标题:为什么选择原生JavaScript
作者分享了过去一年开发复杂Web应用(一个音乐学校管理工具)的经历,以此献给那些对Web技术中人为复杂性感到困惑和沮丧的开发者。该应用功能繁多,包括课程安排、学生计费、在线视频教学(含文件共享、节拍器等工具)、品牌页面构建器(含预约系统)以及仪表盘等。作者强调,尽管应用复杂,但他完全使用原生JavaScript和Web Components构建。
作者首先指出,当前主流前端框架(React、Angular、Vue、Svelte)存在三个共同点:都需要构建步骤、都鼓励使用TypeScript,并且都引入了“人为复杂性”。作者以“响应式”概念为例,认为它“毁掉并洗脑了一整代开发者”。他指出,框架试图从开发者手中夺走控制权,例如禁止直接操作DOM、要求用特定方式包装事件监听器、强制使用第三方状态管理工具、禁止使用原生Web Components和import maps等。
作者的核心观点是:“浏览器本身就是框架”。浏览器引擎已经处理了大量工作,开发者只需编写HTML、CSS和JavaScript即可。然而,业界却发明了大量模板语言、CSS预处理器和JavaScript替代品,只是为了逃避直接编写这三者。作者认为,Web Components已经足够强大,只要拥有正确的态度和代码组织方式,就能开发出复杂且健壮的应用。
针对“原生JavaScript没有结构”的批评,作者回应称,这正是因为过去20年我们发明了太多抽象层和工具来回避问题,而非解决问题。他承认自己确实“发明了自己的框架”,并介绍了两个工具:EHTML(让HTML本身具备模板能力,无需虚拟DOM或构建流程)和 e-ui(提供设计系统和交互式自定义元素)。作者强调,他的工具与现有框架的根本区别在于,它们不重新发明轮子,而是用原生技术解决实际问题,例如:为HTML添加模板功能、让表单原生支持JSON、通过HTML缓存加速多页面应用、以及支持import maps来组织JavaScript代码。他认为,这种方法不仅可行,而且扩展性很好,并且无需依赖AI来生成大量代码。
最后,作者希望这篇文章能引发读者思考,甚至重新审视自己构建应用的方式。
评论总结
根据评论内容,总结如下主要观点及论据:
观点一:支持无框架/轻框架开发(Vanilla JS) - 浏览器本身就是强大的框架,无需额外抽象层(评论4、26) - 自建框架可避免“人为复杂性”,代码更简洁优雅(评论5、12) - LLM时代,Vanilla JS更易被AI理解和生成,减少类型错误(评论5、23) - 关键引用: - "The browser is already the framework, and a powerful one at that"(评论4) - "The author frames this as artificial complexity, and that's the best framing I've seen"(评论5)
观点二:框架在团队协作中不可或缺 - 框架提供统一规范,避免多人协作时各自为政(评论1、25) - 大型项目需要框架的“护栏”和可预测性(评论22) - 招聘时,通用框架降低沟通成本(评论3、16) - 关键引用: - "A framework is an upfront agreement about how to build something"(评论25) - "When your codebase and your team reach a certain size you need the baseline, predictability and the guard rails"(评论22)
观点三:折中立场——各有适用场景 - 个人项目可用Vanilla JS,团队项目用框架(评论16、21) - 框架提供便利但增加学习成本,自制框架灵活但维护困难(评论21) - 关键引用: - "Vanilla JavaScript makes sense for personal projects, but if you're working on a team, I wouldn't trust other team members"(评论16) - "They're just different ways of doing things"(评论21)
其他讨论点: - TypeScript的争议:部分人认为其增加复杂性(评论20、23),部分人认为其是必要补充(评论2、10) - Web Components作为中间方案(评论15、20) - LLM对前端开发的影响:可能减少框架依赖(评论5、9)