【译】折叠 - JavaScript的第三个时代

471 阅读5分钟

The Third Age of JavaScript

每隔10年,JavaScript就会有一次换岗。我认为我们刚刚开始了一个加速变化的时期,未来可以被视为JavaScript的第三个时代。

第三时代

故事到此为止_1F517

1997-2007年,JS的第一个时代

以轰轰烈烈的方式开始,又以呜咽的方式结束。大家都知道Brendan Eich的故事,也许鲜为人知的是,ES4的努力是如何在Flash/Actionscript等封闭生态系统的强烈竞争中摇摇欲坠的。JS的完整起源故事最好由其主要作者Brendan Eich和Allen Wirfs-Brock在《JavaScript: The First 20 Years》中讲述了JS的完整起源故事。

JS的第二个时代

即2009-2019年,始于2009年的奇迹,npm、Node.js和ES5诞生于此。随着Doug Crockford向我们展示了它的优秀部分,用户建立了一大堆JS构建工具和库,并将JS的触角延伸到了桌面和新奇的智能手机上。到了2019年,我们甚至看到了手机上出现了专门的JS运行时,比如Facebook的Hermes,以及Svelte 3这样的编译器优先(compiler first)前端框架。

第三时代"■▄▄■▓。

2020年感觉像是一个新时代的开始。如果说第一个时代是构建出一门语言,第二个时代是用户探索和扩展语言,那么第三个时代就是清除遗留的假设,折叠工具层。

被清除的主要传统假设是JS生态系统对CommonJS的依赖,CommonJS是经过一系列的妥协演变而来的。它的替代者ES Modules已经等待了一段时间,但缺乏真正飞跃的动力,因为现有的工具很慢但 "足够好"。在前端,现代浏览器也具备了少量处理这些的能力,但重要的细节还没有解决。Pika/Snowpack项目的定位是通过提供一个可以随着ES模块的解决而消失的门面来加速这个未来[The Pika/Snowpack project is positioned to accelerate this future by providing a facade that can disappear as ES Modules get worked out.]。作为最后的奖励,IE11将从今年开始慢慢走向生命的终点,并在2029年结束。

另一个即将消失的假设是,JavaScript工具必须在JavaScript中构建。类型安全和10倍-100倍性能提升的潜力太大,不容忽视。随着TypeScript几乎完全接管JavaScript,"为JS而JS "的理想被削去,现在Deno和Relay证明人们会学习Rust为核心JS工具做贡献。Brandon Dail预测这种转换将在2023年完成。我们将继续使用JavaScript和TypeScript编写大多数亲和力大于性能的周边工具。过去我们考虑的是 "函数式核心,命令式的外壳",现在我们正在向 "系统核心,脚本壳 "转变。

注意--这一点是有争议的,Python的PyPy表明这不是一个必然的结论。

折叠也在以有趣的方式进行。Deno采取了一种激进的方式,编写了一个全新的运行时,将一堆做测试、格式化、linting和bundling等任务的常用工具折叠成一个二进制运行时,支持TypeScript,甚至包括一个标准库。Rome采取了不同的策略,在Node.js的基础上折叠了所有这些层(据我所知,我并不太了解它)。

10年前不存在的东西,现在已经成为事实,那就是公共云(AWS、Azure、GCP等)。JavaScript与云的关系很有意思,我无法完全说清楚--云平台的开发人员平常八竿子也打不到JS(Cloud platform devs wouldn't touch JS with a 10 foot pole),但JS却成为他们最大的消费者。AWS Lambda推出的时候,首先使用的就是JS。

还有一个明显的举动,就是在你的IDE和云之间折叠层,并移除中间讨厌的笔记本电脑。Glitch、Repl.it、Codesandbox、GitHub Codespaces、Stackblitz等都是利用JS探索这一领域的Cloud开发平台。像 Netlify 和 Vercel 这样的 JAMstack 提供商从 CI/CD 和 CDN 之间的层级折叠的角度来解决这个问题,并移除中间讨厌的运行服务器。

即使是在前端框架中,正在进行的活动也很吸引人。Svelte将从动画到状态管理的一切都折叠到编译器中。React正在探索元框架和客户端-服务器集成。而Vue正在开发一个名为Vite的 "unbundler "开发服务器项目。

总结:第三时代的JS工具将

  • 更快
  • ES Module优先
  • 折叠(一个工具做好多件事,而不是多件工作做好一件事)
  • Typesafe-er (以强类型语言为核心构建,并在用户代码中支持零配置的Typescript)
  • 安全加固(防止依赖性攻击,或松懈的权限)
  • 多语种
  • 新同构(认识到很多JS应该在构建时或服务器端先运行,然后再到达客户端。

所有这些工作的结果是更好的开发者体验(更快的构建、行业标准的工具)和用户体验(更小的捆绑包)。

JavaScript的死亡?

如果Gary Bernhardt的预言成真,那么第三时代可能是JavaScript的最后一个时代(他的时间线给出的JS要到2035年)。总有Web Assembly这个迫在眉睫的幽灵--连Brendan Eich都把他的名言改成了 "永远赌JS--和WASM"。他原本认为JS可以成为 "通用的虚拟机",但他曾经告诉我,现在的WASM就是这个想法的最终实现。

如果是这样--我们现在已经进入了终局游戏。

轮到你了🔗""。

约2030年左右JavaScript第三时代的结束会是什么样子?让我知道你的猜测👇