在计算机科学的历史中,几乎没有哪种语言像JavaScript这样,在短短二十多年里完成了从“玩具”到“世界语言”的逆袭。
它最初只是浏览器中的脚本工具,用来验证表单、弹个警告框,如今却驱动着从服务器到桌面应用、从物联网到机器学习的整个技术版图。
然而,当这种野蛮生长的力量达到顶峰时,一股前所未有的复杂性危机也正悄然蔓延。
框架层叠框架、工具链缠绕工具链,开发者们逐渐迷失在抽象与依赖的迷宫中,忘记了语言原本的朴素与直接。
这篇文章将提出一个独立观点:JavaScript需要的不是更多抽象,而是在复杂性与原始朴素之间找回平衡。
如果回到2006年,你只需要打开HTML文件,写一段<script>,直接操作DOM节点,整个页面的交互便跃然眼前。
那是一种未经修饰的原创力,虽然粗糙,却充满生命力。
而现在,我们为了一个按钮的点击,可能需要构建一个包含Webpack、Babel、React或Vue、Redux或Pinia、TypeScript、ESLint、Prettier等数十个依赖的工程。
虚拟DOM在内存中重建整个组件树,状态管理器以不可变数据流来约束每一个状态变迁,构建工具在构建时进行无数次的转换和优化。
这些技术确实带来了可维护性和跨平台能力,但也让“hello world”的入门门槛高得令人窒息。
我的观点或许显得有些不合时宜:我们过度投资于复杂性,而低估了简单性的力量。
绝大多数企业级应用,其实并不需要完整的MVVM框架。
原生JavaScript搭配模块化工具,再加上浏览器内置的fetch、Custom Elements、Shadow DOM等标准能力,已经能轻松覆盖大部分需求。
原生代码没有框架升级的兼容风险,没有虚拟DOM的额外内存开销,也没有状态管理带来的概念负担。
它更接近浏览器本身的工作方式,也让开发者能够真正理解底层原理,而不是成为一个只会配置构建工具的“管道工”。
诚然,大型复杂项目需要工程化手段,但我们应该将复杂度控制在真正必要的范围内,而不是为了“现代”而盲目引入。
好消息是,JavaScript生态正在朝这个方向自我修正。
Web Components经历了十年的沉寂后,终于随着现代浏览器的兼容完善而崭露头角;Svelte通过编译时优化,将框架的运行时体积压缩至极致;浏览器原生支持的CSS容器查询、@layer、:has等特性,让许多曾经需要JS实现的效果回归样式表。
我们正站在一个转折点:可以选择继续堆叠抽象,也可以学会倾听语言本身的声音。
JavaScript不需要被替代,它需要的是被重新发现——在那些简单却优雅的原生代码里,藏着通往第二曲线的秘密通道。