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 时间来解析它!!”

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

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

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

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

  • 在需要的地方无法获取的信息(通常由语言功能引起,例如变量提升或内置方法)

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

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

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

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

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

  • 通用压缩算法

JavaScript 极致性能追求:TC39 二进制 AST 提案 Prototype(原型)

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

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

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

该提案中的 FAQ :question:解释了为什么它不考虑传输原生字节码,为什么 WebAssembly 不是所有 Web 问题的答案,以及其他许多问题的答案。

JavaScript 极致性能追求:TC39 二进制 AST 提案 社区反应

我们最早了解到二进制 AST 是在今年的 TSConf 上,当 TypeScript 作者 Anders Hejlsberg 被问及 TypeScript 到 WebAssembly 的转换问题时,他表示希望改进二进制 AST。

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

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

二进制 AST 提议是过去几年中提高 Web 性能速度的最有希望的提议。 假设这个提议进一步发展,我们希望一旦它可用就立即使用它,并且在 Dojo 中加以支持。

JavaScript 极致性能追求:TC39 二进制 AST 提案 需要帮助吗?请联系我们!

虽然在你的应用中使用二进制 AST 仍为时尚早,但我们已与许多组织合作以改进其 Web 应用的结构和性能。 如果你需要提高应用性能的相关帮助,请联系我们进行讨论:phone:!

英文原文:

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

好文推荐:

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

Hummingbird: 在Web上运行Flutter应用

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

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

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

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


以上所述就是小编给大家介绍的《JavaScript 极致性能追求:TC39 二进制 AST 提案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解LINUX网络技术内幕

深入理解LINUX网络技术内幕

Christian Benvenuti / 夏安、闫江毓、黄景昌 / 中国电力出版社 / 2009-6 / 128.00元

Linux如此的流行正是得益于它的特性丰富及有效的网络协议栈。如果你曾经惊叹于Linux能够实现如此复杂的工作,或者你只是想通过现实中的例子学习现代网络,《深入理解Linux网络内幕》将会给你指导。同其他O'Reilly的流行书籍一样,《深入理解Linux网络内幕》清楚地阐述了网络的基本概念,并指导你如何用C语言实现。虽然早先的 TCP/IP经验是有用的,但初学者通过《深入理解Linux网络内幕》......一起来看看 《深入理解LINUX网络技术内幕》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具