网站首页 > 技术文章 正文
作者:大道至简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数组技巧「值得收藏」》
《36个工作中常用的JavaScript函数片段「值得收藏」》
《一文了解文件上传全过程(1.8w字深度解析)「前端进阶必备」》
《手把手教你如何编写一个前端图片压缩、方向纠正、预览、上传插件》
《JavaScript正则深入以及10个非常有意思的正则实战》
《前端开发规范:命名规范、html规范、css规范、js规范》
《100个原生JavaScript代码片段知识点详细汇总【实践】》
《手把手教你深入巩固JavaScript知识体系【思维导图】》
《一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧》
《身份证号码的正则表达式及验证详解(JavaScript,Regex)》
《127个常用的JS代码片段,每段代码花30秒就能看懂-【上】》
《深入浅出讲解JS中this/apply/call/bind巧妙用法【实践】》
《干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)》
《面试中教你绕过关于 JavaScript 作用域的 5 个坑》
作者:大道至简1024
转发链接:https://mp.weixin.qq.com/s/AVkbPPuI64dKmV2djKbHyg
- 上一篇: EXCEL中常用的40个快捷键(12)
- 下一篇: 纯JS手写轮播图(代码逻辑清晰,通俗易懂)
猜你喜欢
- 2024-11-21 进击的JAMStack
- 2024-11-21 10个实用的JS技巧「值得收藏」
- 2024-11-21 ps教程:Ctrl加J的对比,你学会了吗?
- 2024-11-21 「JS优化篇」你的 if - else 代码肯定没我写的好
- 2024-11-21 完全免费的下载神器,速度超快,值了
- 2024-11-21 14 个拷贝数组的 JS 技巧
- 2024-11-21 纯JS手写轮播图(代码逻辑清晰,通俗易懂)
- 2024-11-21 EXCEL中常用的40个快捷键(12)
- 2024-11-21 抖音素材分享自取
- 2024-11-21 技术网站重写复制按键 js 跳转到注册页,就能增加用户?
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-