编程技术文章分享与教程

网站首页 > 技术文章 正文

JavaScript 已进入第三个时代,未来将何去何从?

hmc789 2024-11-21 15:57:16 技术文章 2 ℃


作者:大道至简1024

转发链接:https://mp.weixin.qq.com/s/AVkbPPuI64dKmV2djKbHyg

前言

JavaScript 每十年会有一次大换血。我认为,一个加速变革的时期刚刚开启,在未来可能会被认为是 JavaScript 的第三个时代

Third age

历史回顾

JS 的第一个时代,1997-2007 年,开局很热闹,结局让人唏嘘。大家都知道 Brendan Eich 的故事,但也许很少有人知道 ES4 是如何在 Flash/Actionscript 等封闭生态系统的激烈竞争中步履维艰的。JS 的完整起源故事被其主要作者 Brendan Eich 和 Allen Wirfs-Brock 在 JavaScript: The First 20 Years 1一文中讲述得更好。

ECMAScript 历史时间线

JS 的第二个时代,2009-2019年,开始于神奇的 2009 年。这一年,npm,Node.js 和 ES5 诞生了。随着 Doug Crockford 发表的JavaScript 语言精粹,开发者创造了一大堆 JS 构建工具和库,并将 JS 的领域扩展到桌面端和新型智能手机。到 2019 年,我们甚至看到了像Facebook 的 Hermes这样的手机端专用 JS 运行时和 Svelte 3 这样的编译器优先的前端框架。

第三个时代

2020 年感觉像是一个新时代的开始。如果说第一个时代是关于语言的构建,而第二个时代是关于用户对语言的探索和扩展,那么第三个时代则是关于清除遗留假设和缩减工具层。

注:我之前发布过 Collapsing Layers 2论文。

被清除的主要遗留假设是 JS 生态系统对 CommonJS 的依赖,这是一系列妥协的结果。它的替代品—— ES 模块,已经蓄势待发了,但是由于现有的工具体系虽然速度慢但还够用,它缺乏真正飞跃的动力。在前端,现代浏览器也提供了部分支持,但是一些重要的细节问题还没有解决。Pika/Snowpack 项目的定位正是通过提供一个可以随着 ES 模块的完成而消失的外观模式来加快这个进程。作为最后的奖励,IE11 将从今年开始它缓慢的退出之路,直到 2029 年终结。

另一个要抛弃的假设是 JavaScript 工具必须用 JavaScript 构建。热路径(hot path,编译器中的概念,花费时间最多的代码执行路径)中的类型安全和10倍-100倍性能提升的潜力太大了,不容忽视。随着 TypeScript 几乎完全可替换 JavaScript,“JS 自给自足”的理想已经消失。现在的 Deno 和 Relay 也证明,人们会学着用 Rust 来贡献核心 JS 工具。Brandon Dail 预言这个转换将在 2023 年完成。我们会继续用 JavaScript 和 TypeScript 编写大多数强调可用性胜过性能的工具。我们曾经思考的“函数式内核,命令式外壳”3,现在将转向“系统内核,脚本外壳”。

注:尚存争议,Python 的 PyPy 也表明这还不是定论。

工具层缩减的方式也挺有意思。Deno 采用了一种激进的方法来编写一个全新的运行时,它用 TypeScript 将常见的用于测试、格式化、linting 和打包等任务的一系列工具合并成一个二进制文件,甚至还包括一个标准库。Rome 采取了不同的策略,将所有工具层都折叠于 Node.js 之上(据我所知,我也不太熟悉)。

有一些 10 年前不存在的一些东西,现在已经成为了生活的一部分,那就是公有云(AWS、Azure、GCP等)。JavaScript 和云之间有一种有趣的关系,我也说不太清楚——云平台开发者是不会碰 JS 的,但 JS 却是他们最大的客户。AWS Lambda 首先用 JS 发布。还有一个明显的变化是,IDE 和云之间的分层将被折叠简化,处于中间的麻烦的开发机器变得无关紧要了。Glitch、Repl.it、Codesandbox、GitHub Codespaces、Stackblitz 以及更多工具都是云发行版,都在利用 JS 探索这个领域。

即使在前端框架中,进展情况也是极好的。Svelte 把从动画到状态管理的所有内容都压缩进编译器环节。React 正在探索 metaframeworks 和客户端-服务器集成。Vue 正在致力于一个名为 Vite 的 dev server 项目。

综上所述:第三个时代的 JS 工具将会:

  • 更快
  • ESM 优先
  • 缩减分层(一个工具做好许多事情,而不是许多工具做好一件事情)
  • 更加类型安全(核心采用强类型语言构建,用户代码以零配置方式支持 TS)
  • 更安全(避免依赖攻击或者过于宽松的权限)
  • 多语言
  • 新型同构(认识到很多 JS 在到达客户端之前应该先在构建时或服务端运行)

所有这些工作的结果是更好的开发者体验(更快的构建,行业标准工具)和用户体验(更小的资源包,更快的功能交付)。从网站脚本玩具语言,到完整的应用程序平台,JavaScript 最终完成了转变。

JavaScript 的末日?

如果加里·伯恩哈特的预测?是正确的,第三个时代可能是 JavaScript 的最后一个时代(他给出的时间线是截止到 2035 年)。Web Assembly 总像一个若隐若现的幽灵——即使是 Brendan Eich,也将他的名言改成了“始终押注于 JS,以及 WASM”。他最初认为 JS 可能是“通用虚拟机”,但他曾告诉我现在 WASM 才是这个想法的最终实现。

若真如此,我们目前正处于终局之战(Endgame)。

推荐JavaScript经典实例学习资料文章

前端上传前预览文件 image、text、json、video、audio「实践」

深入细品 EventLoop 和浏览器渲染、帧动画、空闲回调的关系

推荐13个有用的JavaScript数组技巧「值得收藏」

前端必备基础知识:window.location 详解

不要再依赖CommonJS了

犀牛书作者:最该忘记的JavaScript特性

36个工作中常用的JavaScript函数片段「值得收藏」

Node + H5 实现大文件分片上传、断点续传

一文了解文件上传全过程(1.8w字深度解析)「前端进阶必备」

【实践总结】关于小程序挣脱枷锁实现批量上传

手把手教你前端的各种文件上传攻略和大文件断点续传

字节跳动面试官:请你实现一个大文件上传和断点续传

谈谈前端关于文件上传下载那些事【实践】

手把手教你如何编写一个前端图片压缩、方向纠正、预览、上传插件

最全的 JavaScript 模块化方案和工具

「前端进阶」JS中的内存管理

JavaScript正则深入以及10个非常有意思的正则实战

前端面试者经常忽视的一道JavaScript 面试题

一行JS代码实现一个简单的模板字符串替换「实践」

JS代码是如何被压缩的「前端高级进阶」

前端开发规范:命名规范、html规范、css规范、js规范

【规范篇】前端团队代码规范最佳实践

100个原生JavaScript代码片段知识点详细汇总【实践】

关于前端174道 JavaScript知识点汇总(一)

关于前端174道 JavaScript知识点汇总(二)

关于前端174道 JavaScript知识点汇总(三)

几个非常有意思的javascript知识点总结【实践】

都2020年了,你还不会JavaScript 装饰器?

JavaScript实现图片合成下载

70个JavaScript知识点详细总结(上)【实践】

70个JavaScript知识点详细总结(下)【实践】

开源了一个 JavaScript 版敏感词过滤库

送你 43 道 JavaScript 面试题

3个很棒的小众JavaScript库,你值得拥有

手把手教你深入巩固JavaScript知识体系【思维导图】

推荐7个很棒的JavaScript产品步骤引导库

Echa哥教你彻底弄懂 JavaScript 执行机制

一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧

深入解析高频项目中运用到的知识点汇总【JS篇】

JavaScript 工具函数大全【新】

从JavaScript中看设计模式(总结)

身份证号码的正则表达式及验证详解(JavaScript,Regex)

浏览器中实现JavaScript计时器的4种创新方式

Three.js 动效方案

手把手教你常用的59个JS类方法

127个常用的JS代码片段,每段代码花30秒就能看懂-【上】

深入浅出讲解 js 深拷贝 vs 浅拷贝

手把手教你JS开发H5游戏【消灭星星】

深入浅出讲解JS中this/apply/call/bind巧妙用法【实践】

手把手教你全方位解读JS中this真正含义【实践】

书到用时方恨少,一大波JS开发工具函数来了

干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)

手把手教你JS 异步编程六种方案【实践】

让你减少加班的15条高效JS技巧知识点汇总【实践】

手把手教你JS开发H5游戏【黄金矿工】

手把手教你JS实现监控浏览器上下左右滚动

JS 经典实例知识点整理汇总【实践】

2.6万字JS干货分享,带你领略前端魅力【基础篇】

2.6万字JS干货分享,带你领略前端魅力【实践篇】

简单几步让你的 JS 写得更漂亮

恭喜你获得治疗JS this的详细药方

谈谈前端关于文件上传下载那些事【实践】

面试中教你绕过关于 JavaScript 作用域的 5 个坑

Jquery插件(常用的插件库)

【JS】如何防止重复发送ajax请求

JavaScript+Canvas实现自定义画板

Continuation 在 JS 中的应用「前端篇」

作者:大道至简1024

转发链接:https://mp.weixin.qq.com/s/AVkbPPuI64dKmV2djKbHyg

Tags:

标签列表
最新留言