JavaScript 每10 年就会经历一次新一代。在我看来,JavaScript 目前正处于快速转型的开始,未来可能被称为JavaScript 的第三个时代。
本文最初发表于shawn swyx wang 的博客,经原作者许可在InfoQ 中文站翻译分享。
历说从头
JS的第一个时代(1997-2007)是虎头蛇尾。每个人都知道Brendan Eich 的故事,但鲜为人知的是ES4 如何面对Flash/Actionscript 等封闭生态系统的激烈竞争。要了解更多有关JS 起源的信息,我们建议阅读《JavaScript:20 年发展史》。我认为这本书是一个非常合适的选择,因为它是由JS 的主要作者Brendan Eich 和Allen Wirfs-Brock 共同出版的。
JS 的第二个时代(2009 年至2019 年)始于2009 年,这是npm、Node.js 和ES5 的关键一年。 Doug Crockford 在他的书《JavaScript 精粹》 中展示了JS 的精妙之处之后,JS 用户创建了许多JS 构建工具和库,将JS 的范围扩展到了台式电脑和新的智能手机。 2019 年甚至还出现了Facebook 的Hermes 等定制JS 运行时系统以及手机上的Svelte 3 等预编译前端框架。
译者注:
《JavaScript 精粹》,本书由Doug Crockford 撰写。在这本书中,他主要展示了JS在语法、对象、函数、继承、数组、正则表达式、编码格式以及一些不错的函数方面的优势。同时也指出了JS的很多缺点。
Hermes是Facebook开发的运行在Android系统上的JS引擎,是一个优化Android系统上运行的React Native应用程序性能的引擎。该引擎的主要特点是预先对代码进行静态优化和字体优化。 节代码压缩。
Svelte是一个新概念的前端框架。该框架有两个主要特点:
首先,它封装了代码检查、状态管理和动画等功能。
然后,在构建时,源代码会直接转换为目标可执行代码,而不是在运行时进行处理(其中webpack 用于在构建期间调用运行时处理代码)。
JS 的第三纪元
2020 年感觉像是一个新时代的开始。如果说第一个时代是关于一种语言的诞生,第二个时代是关于人们对这种语言的探索和延伸,那么第三个时代就是关于历史观念的抛弃和工具等级的折叠。
注:作者之前曾提出过分层折叠的想法
在当今的JS 生态中,你编写的大部分代码想要部署到目标环境(例如浏览器环境)时,都需要经过TS 编译器、ESLint/JSLint、Less 等多层工具的转换。有。以/Scss、Babel、uglify等为例,笔者认为未来的趋势将是尽可能地瓦解这些处理层。
第一个需要抛弃的历史观念是JS生态系统需要依赖CommonJS模块系统。这个概念是不断妥协的结果。 ES Modules 等待更换机会已经很久了,但我们还没有机会在一夜之间实现这一目标。主要原因是人们缺乏动力,尽管目前使用的工具很慢并且“足够好”。来替换它们。在前端,现代浏览器已经具备了处理一些ES模块功能的能力,但是一些重要的细节仍然没有完全解决。
译者注:
由于这些重要细节仍未解决,V8 官方建议使用webpack 或Rollup 等构建工具构建源代码,即使在现代浏览器中使用ES 模块功能也是如此。
Pika 的Snowpack 项目希望通过提供一个随着ES 模块改进而逐渐消失的外观,从而加速ES 模块功能的早期采用。最后,令人鼓舞的消息是,IE11将从今年到2029年逐步结束其缓慢的发展过程。
另一个需要放弃的历史概念是JavaScript 工具必须用JavaScript 构建。 热路径的类型安全性和性能改进(10-100 倍) 的潜力是不可忽视的。随着TypeScript 几乎完全接管JavaScript,这种“使用JS 为JS 构建工具”的想法正在慢慢消失。最近Deno 和Relay 的出现进一步证明人们学习Rust 是为了学习核心JS 工具。为图书馆做出贡献。 Brandon Dail 预测这种变化(工具的构建方式)将于2023 年完成。然而,大多数使用中的非核心工具仍然是使用JavaScript 和TypeScript 编写的,因为易用性比性能更重要。以前我们考虑“功能内核、命令shell”,现在我们需要考虑“系统内核、脚本shell”。
注:以上几点也值得商榷。 Python 的解析器PyPy 表明这还不是一个定局。
这些层也以有趣的方式折叠。 Deno 创建了一个全新的运行时,并将一组常见的任务工具(例如测试、格式化、代码验证和打包到单个二进制文件中)合并在一起。它还直接包含TypeScript 二进制文件。 Rome 采用了不同的方法,并基于Node.js 重新折叠了这些层(据我所知,Node.js 很容易使用)。
AWS、Azure 和GCP 等公共云在10 年前还不存在,但现在它们已成为生活的一部分。 JavaScript 和云之间的关系非常微妙,我很难解释清楚。云平台开发者不直接使用JS,但JS是他们最大的客户。 AWS Lambda 首先推出了对JS 的支持。最明显的变化之一是合并IDE 和云服务层,并删除中间笨重的笔记本电脑。许多云服务发布商正在使用JS 探索这个空间,包括Glitch、Repl.it、Codesandbox、GitHub Codespaces 和Stackblitz。另一方面,与Netlify 和Vercel 一样,JAMstack 从PoV 开始,合并CI/CD 和CDN 层,并删除中间繁琐的运行时服务。
在前端框架中开发分层折叠同样令人兴奋。从动画到状态管理,Svelte 将所有内容构建到编译器中。 React 也在研究元框架和客户端/服务器集成解决方案,Vue 正在开发一个名为Vite 的“无包”开发服务项目。
概括:
JS第三个时代,其构建工具的发展将包括以下几个方面:
更快的ES模块优先级折叠(事半功倍,而不是事半功倍) 类型安全/类型安全检查(以强类型语言为核心构建;用户将能够以零配置支持TS) 安全性/安全检查(避免依赖注入攻击,或避免严格的权限) 新的同构策略(JS将在构建时或到达客户端时可用) 所有这些工作的最终结果是:改进的开发体验(更快的构建、行业标准工具)和用户体验(更小的构建包、更快的功能交付)。这是JavaScript从脚本编程语言到完整应用平台的终极转变。
JavaScript 将死?
如果Gary Bernhardt的预测成真,第三个时代将是JavaScript的最后一个发展时代(Gary Bernhardt的时间节点是2035年)。 Web 汇编一直在JavaScript 中占据重要地位,甚至Brendan Eich 也改变了他的名言“永远押注于JS 和WASM”。他原本认为JS 可能是“通用虚拟机”,但现在有人告诉我,WASM 就是那个虚拟机。这个想法的最终实现。
如果上述情况属实,那么我们现在正处于JavaScript 死亡的边缘。
轮到你了
2030年左右,JavaScript的第三个时代将结束。到时候JavaScript会如何发展呢?在下面的评论部分分享您的预测:
参考资料:https://www.swyx.io/writing/js-third-age/
版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。