JavaScript 极致性能追求:TC39 二进制 AST 提案

原文做者:Dylan Schiemann前端

译者:UC 国际研发 Jothywebpack


写在最前:欢迎你来到“UC国际技术”公众号,咱们将为你们提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。web

WebAssembly 正愈来愈受欢迎,它不只能提升应用性能,并且支持将其余语言的源代码转换为可在 Web 浏览器中运行的内容。 每次 JavaScript 受到挑战时,社区都会努力建立机制来改善它的性能瓶颈,这些年来咱们从 Mozilla,Google,Apple 和 Microsoft 的努力中也可见端倪。
算法

大型 JavaScript 应用当前面临的性能瓶颈是解析抽象语法树(AST)所需的时间。 二进制 AST 旨在利用解析 WebAssembly AST 所用的一些策略来提升解析 JavaScript AST 的性能。 该提案由 Facebook,Mozilla 和 Bloomberg 的工程师提出,他们指出:
编程

“即便在高性能笔记本上,Chrome 从 Facebook.com 上加载 7MB 未压缩的 JavaScript,可能得花上 15% 的 CPU 时间来解析它!”
浏览器

“启动(加载)时间正在成为Web 应用的性能瓶颈。 Web 现有特性(缓存方面)已支持传输更大量级的 JS 代码。缓存虽然有帮助,但这些特性的取值会按期更新,因此冷启动时间依旧很是重要。 随着 JavaScript 负载的增长,应用启动性能会降低,其中解析时间是初始加载时间的重要组成部分。 举个例子🌰,即便在高性能笔记本上,Chrome 从 Facebook.com 上加载 7MB 未压缩的 JavaScript,可能得花上 15% 的 CPU 时间来解析它!!”
缓存




二进制 AST

二进制 AST 提议为 JavaScript 引入一种新的网络传输格式,该格式提供了抽象语法树(AST)的二进制编码,以此提升 JS 性能。 该提案的目标是提供快速解析。 做者指出,因为 Web 开发者已经习惯了像 webpack 这样的构建工具,所以能够轻松接受这种新格式。 像 TypeScript 和 Babel 这样的编译器也能够直接输出二进制 AST。
网络

该提案开了一个好头,即提供 JavaScript 表层语法的简单替代编码,并使用尽量小的增量来实现高性能解析。 它不会尝试任何语义级编码,例如字节码或编码变量,而会直接使用标识符。
ide

当前解析瓶颈的可能解决方案包括:

  • 在须要的地方没法获取的信息(一般由语言功能引发,例如变量提高或内置方法)工具

  • JavaScript 的早期错误语义(须要对每一个 JavaScript 文件进行预解析)

  • 使用字符致使的效率低下(JavaScript 语法将表达式编译为什么种类型的字符级歧义)

二进制 AST 提议借鉴 WebAssembly 解析方法,二进制编码分为三层:

  • 使用基本原语对 AST 节点进行简单的二进制编码

  • 对上一层进行附加结构压缩

  • 通用压缩算法




Prototype(原型)

提议二进制 AST 的团队使用基于内部 AST 格式的语法,基于 Mozilla 的 SpiderMonkey 引擎实现了早期原型。

解析过程的改进更为显著,建立完整 AST 所需的时间减小了 70-90%。

在早期的 facebook.com 静态新闻源基准测试中,二进制 AST 表示法略小于原始 JavaScript。 解析过程的改进更为显著,建立完整 AST 所需的时间减小了 70-90%。

该提案中的 FAQ ❓解释了为何它不考虑传输原生字节码,为何 WebAssembly 不是全部 Web 问题的答案,以及其余许多问题的答案。




社区反应

咱们最先了解到二进制 AST 是在今年的 TSConf 上,当 TypeScript 做者 Anders Hejlsberg 被问及 TypeScript 到 WebAssembly 的转换问题时,他表示但愿改进二进制 AST。

在今年夏天的 FullStack 上,我询问了 JavaScript 做者 Brendan Eich 对二进制 AST 的见解。 他仍持怀疑态度,但也表示若是真能实现性能优点,那么将来的 JavaScript 版本会重点考虑这个提案。



结论

二进制 AST 提议是过去几年中提升 Web 性能速度的最有但愿的提议。 假设这个提议进一步发展,咱们但愿一旦它可用就当即使用它,而且在 Dojo 中加以支持。



须要帮助吗?请联系咱们!

虽然在你的应用中使用二进制 AST 仍为时尚早,但咱们已与许多组织合做以改进其 Web 应用的结构和性能。 若是你须要提升应用性能的相关帮助,请联系咱们进行讨论☎️!


英文原文:

https://www.sitepen.com/blog/2018/10/28/tc39-binary-ast-proposal



好文推荐:

若是市场上只有一款浏览器,你的职业生涯会怎样?

Hummingbird: 在Web上运行Flutter应用

你也许不知道,CSS 也有编程能力?


“UC国际技术”致力于与你共享高质量的技术文章

欢迎关注咱们的公众号、将文章分享给你的好友

相关文章
相关标签/搜索