JavaScript 极致性能追求:TC39 二进制 AST 提案
栏目: JavaScript · 发布时间: 5年前
内容简介:原文作者:Dylan Schiemann译者:UC 国际研发 Jothy写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。
原文作者:Dylan Schiemann
译者:UC 国际研发 Jothy
写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。
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 负载的增加,应用启动性能会下降,其中解析时间是初始加载时间的重要组成部分。 举个例子:chestnut:,即使在高性能笔记本上,Chrome 从 Facebook.com 上加载 7MB 未压缩的 JavaScript,可能得花上 15% 的 CPU 时间来解析它!!”
二进制 AST
二进制 AST 提议为 JavaScript 引入一种新的网络传输格式,该格式提供了抽象语法树(AST)的二进制编码,以此提高 JS 性能。 该提案的目标是提供快速解析。 作者指出,由于 Web 开发者已经习惯了像 webpack 这样的构建工具,因此可以轻松接受这种新格式。 像 TypeScript 和 Babel 这样的编译器也可以直接输出二进制 AST。
该提案开了一个好头,即提供 JavaScript 表层语法的简单替代编码,并使用尽可能小的增量来实现高性能解析。 它不会尝试任何语义级编码,例如字节码或编码变量,而会直接使用标识符。
当前解析瓶颈的可能解决方案包括:
-
在需要的地方无法获取的信息(通常由语言功能引起,例如变量提升或内置方法)
-
JavaScript 的早期错误语义(需要对每个 JavaScript 文件进行预解析)
-
使用字符导致的效率低下(JavaScript 语法将表达式编译为何种类型的字符级歧义)
二进制 AST 提议借鉴 WebAssembly 解析方法,二进制编码分为三层:
-
使用基本原语对 AST 节点进行简单的二进制编码
-
对上一层进行附加结构压缩
-
通用压缩算法
Prototype(原型)
提议二进制 AST 的团队使用基于内部 AST 格式的语法,基于 Mozilla 的 SpiderMonkey 引擎实现了早期原型。
解析过程的改进更为显著,创建完整 AST 所需的时间减少了 70-90%。
在早期的 facebook.com 静态新闻源基准测试中,二进制 AST 表示法略小于原始 JavaScript。 解析过程的改进更为显著,创建完整 AST 所需的时间减少了 70-90%。
该提案中的 FAQ :question:解释了为什么它不考虑传输原生字节码,为什么 WebAssembly 不是所有 Web 问题的答案,以及其他许多问题的答案。
社区反应
我们最早了解到二进制 AST 是在今年的 TSConf 上,当 TypeScript 作者 Anders Hejlsberg 被问及 TypeScript 到 WebAssembly 的转换问题时,他表示希望改进二进制 AST。
在今年夏天的 FullStack 上,我询问了 JavaScript 作者 Brendan Eich 对二进制 AST 的看法。 他仍持怀疑态度,但也表示如果真能实现性能优势,那么未来的 JavaScript 版本会重点考虑这个提案。
结论
二进制 AST 提议是过去几年中提高 Web 性能速度的最有希望的提议。 假设这个提议进一步发展,我们希望一旦它可用就立即使用它,并且在 Dojo 中加以支持。
需要帮助吗?请联系我们!
虽然在你的应用中使用二进制 AST 仍为时尚早,但我们已与许多组织合作以改进其 Web 应用的结构和性能。 如果你需要提高应用性能的相关帮助,请联系我们进行讨论:phone:!
英文原文:
https://www.sitepen.com/blog/2018/10/28/tc39-binary-ast-proposal
好文推荐:
“UC国际技术”致力于与你共享高质量的技术文章
欢迎关注我们的公众号、将文章分享给你的好友
以上所述就是小编给大家介绍的《JavaScript 极致性能追求:TC39 二进制 AST 提案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [译] ECMAScript 的 Observables 提案
- JavaScript的类字段声明(提案)
- Go 1.15 的提案
- 实用!最新的几个 Vue 3 重要特性提案
- 实用!最新的几个 Vue 3 重要特性提案
- FIBOS 超级节点选举以及提案多签介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解LINUX网络技术内幕
Christian Benvenuti / 夏安、闫江毓、黄景昌 / 中国电力出版社 / 2009-6 / 128.00元
Linux如此的流行正是得益于它的特性丰富及有效的网络协议栈。如果你曾经惊叹于Linux能够实现如此复杂的工作,或者你只是想通过现实中的例子学习现代网络,《深入理解Linux网络内幕》将会给你指导。同其他O'Reilly的流行书籍一样,《深入理解Linux网络内幕》清楚地阐述了网络的基本概念,并指导你如何用C语言实现。虽然早先的 TCP/IP经验是有用的,但初学者通过《深入理解Linux网络内幕》......一起来看看 《深入理解LINUX网络技术内幕》 这本书的介绍吧!