正文
当你把所有这些功能组合起来时,事情就不再那么简单了。我们是否正在解决我们设定的问题,这一点也值得商榷:
https://www.youtube.com/watch?v=nzbV0YgSBuo
衡量成功非常困难。我们已经看到过基准测试失败的情况:
https://x.com/Rich_Harris/status/1828514851741933689?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1828514851741933689%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=
我们发现,人们把绩效归功于新技术,但根本原因却在别处:
https://x.com/RyanCarniato/status/1818402060238565722?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1818402060238565722%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=
面对这一复杂局面,社区的讨论重新回到了更传统的服务器端架构。即那些不属于 "SSR" 的方式,也就是不在服务器上运行客户端 JavaScript 框架的方法。你可以说这是不幸的,也可以说是 JavaScript 语言的局限性,或者是必要的复杂性。但否认这一点是毫无意义的。
如果没有改进的需求,我们不会走到今天。而创新往往需要大量的试错。最简单的工具通常是最好的选择,但当问题变得复杂时,你需要的是能够随之扩展的解决方案。
如果说 2021/22 年是一次回归服务器端基础的重置,那么 2024 年则提醒我们,简单并不能解决所有问题。
通过编译(Compilation)来解决
编译是 JavaScript 发展的常态。每当遇到障碍——无论是浏览器特性支持、冗长的语法,还是语言本身的缺陷,我们都会为其构建编译器。
如今,它已经变得无处不在,以至于标准委员会正在考虑通过编译方式引入新特性。编译和打包已经成为现代 JavaScript 应用的核心构建方式,同时也是 JavaScript 工具链复杂性的根源。
编译的好处是巨大的:类型检查、Linting、Tree Shaking、代码拆分、压缩、同构、宏(Macros)、领域特定语言(DSLs)、单体开发/分布式部署等。在过去 15 年里,这一领域的每一项进步都建立在这一基础之上。没有任何替代方案能达到相同的水平。这或许是 JavaScript 语言的局限,也或许是不可避免的复杂性,但无论如何,否认这一点是徒劳的。