写点什么

我们现在正处于 JavaScript 消亡的边缘?

  • 2020-06-04
  • 本文字数:2820 字

    阅读完需:约 9 分钟

我们现在正处于JavaScript消亡的边缘?

每 10 年 JavaScript 都会发生一次改朝换代式的变革。在我看来,JavaScript 当前正处于一次快速变革的开始,而这段时期未来可能会被称为 JavaScript 第三纪元。


本文最初发布于 shawn swyx wang 博客,经原作者授权由 InfoQ 中文站翻译并分享。


历说从头

JS 的第一纪元(从 1997 至 2007) 堪称虎头蛇尾。大家都知道 Brendan Eich 的故事,但是关于 ES4 是如何与诸如 Flash/Actionscript 之类的封闭生态系统艰难地进行激烈竞争的故事却鲜为人知。我推荐大家读读《JavaScript:20 年发展史》来了解 JS 起源的前前后后,我认为这本书是一个非常合适的选择, 因为该书是由 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 的精妙之处,同时也指出了 JS 的很多缺陷。

Hermes,是 Facebook 推出的一款运行在安卓系统中的 JS 引擎,该引擎对运行在安卓系统中的 React Native 应用做了性能优化,该引擎最大的特点是,会提前对代码进行静态优化和字节码压缩。

Svelte,是一个全新理念的前端框架,该框架最主要的 2 大特性是:

第一,将诸如代码检查、状态管理、动画等功能都做了封装;

第二,构建时会将源码直接转换为目标运行代码,而不是在运行时再处理(这里大家可以回想下在使用 webpack 构建的过程中,那个在运行时处理代码的 runtimechunk.js)。

JS 的第三纪元

2020 年感觉像是一个新纪元的开始。如果说第一个纪元是关于一个语言的诞生,第二纪元是关于人们对这个语言的探索和扩展,那么第三纪元则是与摒弃历史观念和工具层级折叠相关。


注:作者早期提出过 层级折叠 的观点

在当前的 JS 生态里,如果我们希望将编写的代码投入目标环境(例如浏览器环境)运行的话,大部分代码都需要通过几层工具的转换,如 TS 编译器、ESLint/JSLint、Less/Scss 、Babel、uglify 等,那么作者认为未来的趋势是,这些处理层会被尽可能的折叠。


首当其冲要摒弃的历史观念是:JS 生态需要依赖 CommonJS 模块系统,这种观念是不断妥协的结果。ES Modules 作为替代者已经伺机而动很久了,只是缺少一个一蹴而就的机会,主要的原因是,当前在使用中的工具虽然慢但是“已经够用”,于是大家缺乏更换的动力。在前端,现代浏览器虽然已经具备了处理一些 ES Modules 功能的能力,但一些重要的细节依然没有得到很好的解决。


译者注:

由于这些重要的细节没有解决,所以 V8 官方建议大家,在现代浏览器上使用 ES Modules 功能时,依然通过诸如 webpack、Rollup 之类的构建工具对源代码进行构建。


Pika 的 Snowpack 项目希望通过提供一个外观模式(facade)来加快 ES Modules 功能的提前应用,该模式会随着 ES Modules 的完善而逐步消失。最后来点鼓舞人心的消息,IE11 从今年开始至 2029 年将逐步结束其缓慢的发展历程。


另一个要摒弃的历史观念是:必须使用 JavaScript 构建 JavaScript 工具。 在热路径中,类型安全性和 性能提升(10 到 100 倍) 的潜力太大了,不容忽视。这种“只使用 JS 为 JS 构建工具”的想法,随着 TypeScript 几乎完全接管了 JavaScript 而逐渐消失,同时最近崭露头角的 Deno 和 Relay 也进一步证明了,人们将会通过学习 Rust 来向 JS 核心工具库做贡献。Brandon Dail 预测这种转变(工具的构建形式)将会在 2023 年完成。不过大部分使用中的非核心工具,由于其易用性相对性能更加重要,因此我们将依然会使用 JavaScript 和 TypeScript 进行编写。以前我们考虑的是“功能内核,命令式 Shell”,而现在我们应该考虑的是“系统内核,脚本 Shell”。


注:上面的观点也是有争议的。Python 的解析器 PyPy 就表明这不是一个既定的结论。


层级也在以有趣的方式进行折叠。Deno 采取了激进的方式,它编写了一个全新的运行时,同时将诸如测试、格式化、代码校验和打包等一堆常用的任务工具折叠到一个二进制文件中,针对 TypeScript 甚至直接包含了一个 标准库。而 Rome 则采用了不同的方式,它还是基于 Node.js 将这些层折叠了起来(据我所知,这些使用起来很简单)。


10 年前,诸如 AWS、Azure、GCP 等公有云都还不存在,但是今天,它们已经是生活的一部分了。JavaScript 和云之间的关系非常微妙,以至于我都很难清晰的表述出来。云平台的开发者不会直接使用 JS,但是 JS 却又是他们最大的客户。AWS Lambda 第一个推出对 JS 的支持,它的一个明显变化是,折叠了 IDE 层和云服务层,移除了中间那个令人讨厌的笔记本电脑。许多诸如 Glitch、Repl.it、Codesandbox、GitHub Codespaces、Stackblitz 的 云服务发行者 都在利用 JS 来探索这个领域。与此同时,像 Netlify 和 Vercel 一样,JAMstack 从 PoV 开始,合并了 CI/CD 层和 CDN 层,移除了其间令人厌烦的运行时服务。


即使在前端框架中,层级折叠的发展同样鼓舞人心。从动画到状态管理,Svelte 将所有的事情都折叠到了编译器里。React 也在探索 元框架 和 客户端与服务端集成 的方案,同时 Vue 正在致力于开发一个称为 Vite 的“无需打包”的开发服务项目。


总结:


在 JS 第三纪元中,其构建工具的发展将会是下面几个方面:


  • 更快

  • ES Modules 优先

  • 层级折叠(事半功倍,而非事倍功半)

  • 类型安全 / 类型安全检查(以强类型语言为核心进行构建,同时允许用户零配置支持 TS)

  • 安全 / 安全检查(避免依赖注入攻击,或者不严格的权限)

  • 新的同构策略(充分的认识到,JS 应该首先在构建时运行,或者在到达客户端之前在服务器端运行)


所有这些工作,最终都是促使开发体验(更快的构建,行业标准的工具化)和用户体验(更小的构建包,更快的功能交付)变得更好。这是 JavaScript 从脚本编程语言到完整应用平台的最终蜕变。

JavaScript 将死?

如果 Gary Bernhardt 的预言成真,那么第三纪元将是 JavaScript 的最后一个发展纪元(Gary Bernhardt 给出的时间结点是 2035 年)。Web Assembly 总是在 JavaScript 的周围若隐若现,甚至连 Brendan Eich 都改变了他的名言称:“永远押宝在 JS 和 WASM”,他最初认为 JS 可能是“通用虚拟机”,但是曾经有人告诉我,现在 WASM 就是这个想法的最终实现。


如果真如上面所说,那么我们现在正处于 JavaScript 消亡的边缘

轮到你了

大约到 2030 年的时候,JavaScript 的第三纪元接近尾声,那时 JavaScript 将会有什么样的发展?请在下面评论区说出你的预测:



原文链接:https://www.swyx.io/writing/js-third-age/


2020-06-04 19:007381

评论 5 条评论

发布
用户头像
7年后再来看这条评论
2023-01-29 11:05 · 浙江
回复
用户头像
十年后再来看这条评论,😄
2020-06-19 22:38
回复
用户头像
不特 js,其他弱类型的语言都无法胜任大型的项目,nnd,我自己写的代码之后都看不懂,有类型提示多贴心呀
2020-06-07 12:01
回复
哈哈,各有各的好处
2020-06-11 01:46
回复
用户头像
当wasm完全覆盖JavaScript的API之后
2020-06-07 00:23
回复
没有更多了
发现更多内容

常用MQTT客户端库简介

EMQ映云科技

物联网 IoT mqtt 客户端 企业号 3 月 PK 榜

如何通过优化图片、JS等资源加载项来提高网页的加载速度?

兴科Sinco

前端开发 CDN HTTP 网页加速

强大的录屏:Camtasia 2022 汉化激活版

真大的脸盆

Mac 软件 屏幕录制 录屏软件 录屏工具

面试官:String字符串的最大长度是多少?

做梦都在改BUG

Java

前端有边界,但低代码没有

引迈信息

前端 后端 低代码 ChatGPT

代码开源!阿里妈妈展示广告Match底层技术架构最新进展

阿里技术

开源

YOWOv2:优秀的实时视频动作检测框架

Zilliz

计算机视觉 构建模型 Milvus

CDN省钱大法!华为云开年采购季低价购,CDN0.03元/GB起,短信0.006元/条起

科技怪授

CDN 华为云

阿里表哥甩我一份Redis笔记,看完还进不了阿里让我卖豆腐去

做梦都在改BUG

Java 数据库 nosql redis 缓存

GitHub 润色框架,让你的GitHub不再索然无味

做梦都在改BUG

GitHub

“AI 上运动,直播更精彩” 百度智能云联手 Pixellot 创新中国大众体育传播新模式

Baidu AICLOUD

视频云 云导播

如何通过Java更改Word中的页面大小和页面方向

在下毛毛雨

Java word 页面布局

《中国奇谭》打动万千观众,一首歌道尽现代人心酸

曲多多(嗨翻屋)版权音乐

音乐 音乐播放

华为工单宝——为企业客户提供更强大的数字化现场作业解决方案

科技怪授

CDN 华为云

五大方面多管齐下,用友助力企业建设世界一流司库体系

用友BIP

携手共进丨九科信息入选信通院“铸基计划”高质量数字化转型产品及服务全景图,并受邀出席高质量数字转型创新大会

九科Ninetech

国有企业财务数智化转型实践,用友BIP一路随行

用友BIP

财务数智化

Copilot 用“粉紫色磨砂UI”和“啊啊啊BGM ”,梦境了这届网友

B Impact

《深入理解高并发编程:JDK核心技术》-冰河新书上市

冰河

并发编程 多线程 高并发 协程 异步编程

华为云视频直播,流量大放“价”,超好用!

科技怪授

强!阿里P9限时开源的实战笔记:SpringBoot2精髓

做梦都在改BUG

Java 面试 微服务 Spring Boot 框架

这是我见过最好的JVM笔记,拿到阿里offer后我哭了

做梦都在改BUG

Java JVM 虚拟机 垃圾回收

以“业财合一”构建业务财务体系,让财务更在行,让业务会经营

用友BIP

海泰方圆又双叒叕连获两项隐私计算专利

电子信息发烧客

测试人社区——软件测试技术沙龙分享

测试人

人工智能 软件测试 精准测试 工程效能 ChatGPT

全网超火Blender零基础教程!从零上手的免费3D软件

Finovy Cloud

blender 3D软件

传统企业,如何构建性能测试技术体系

老张

技术 #性能测试

我们现在正处于JavaScript消亡的边缘?_大前端_shawn swyx wang_InfoQ精选文章