JavaScript 極致效能追求:TC39 二進位制 AST 提案

Jothy發表於2018-12-11

原文作者: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 負載的增加,應用啟動效能會下降,其中解析時間是初始載入時間的重要組成部分。 舉個例子?,即使在高效能筆記本上,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 ❓解釋了為什麼它不考慮傳輸原生位元組碼,為什麼 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 應用的結構和效能。 如果你需要提高應用效能的相關幫助,請聯絡我們進行討論☎️!


英文原文:

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



好文推薦:

如果市場上只有一款瀏覽器,你的職業生涯會怎樣?

Hummingbird: 在Web上執行Flutter應用

你也許不知道,CSS 也有程式設計能力?


“UC國際技術”致力於與你共享高質量的技術文章

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

JavaScript 極致效能追求:TC39 二進位制 AST 提案



相關文章