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國際技術」致力於與你共享高質量的技術文章

歡迎關注咱們的公衆號、將文章分享給你的好友

相關文章
相關標籤/搜索