V8 發佈 v9.1
每隔六周,我們會按照 發佈流程 建立 V8 新的分支。每個版本都是在 Chrome Beta 的里程碑之前,直接從 V8 的 Git 主分支出分支。今天,我們很高興宣佈最新的分支 V8 版本 9.1,該版本將進入 Beta 階段,直到幾周後與 Chrome 91 穩定版協調發佈。V8 v9.1 包含了各種針對開發者的功能。本篇文章提供了一些亮點的預覽以期待發佈。
JavaScript
FastTemplateCache
改進
V8 API 向嵌入者暴露了 Template
介面,可用於創建新的實例。
創建和配置新物件實例需要幾個步驟,這就是為什麼克隆現有物件通常更快。V8 使用兩級快取策略(小型快速陣列快取和大型緩慢字典快取)根據範本查找新建物件並直接克隆它們。
以前,範本的快取索引是在範本創建時分配,而不是插入快取時分配。這導致快速陣列快取被保留給那些通常根本從未實例化的範本。修復此問題後,在 Speedometer2-FlightJS 基準測試中改善了 4.5%。
頂層 await
頂層 await
在 v9.1 開始已預設啟用,不再需要 --harmony-top-level-await
。
請注意,對於 Blink 渲染引擎,頂層 await
已在版本 89 預設啟用。
嵌入者應注意,啟用此功能後,v8::Module::Evaluate
將始終返回 v8::Promise
物件而不是完成值。如果模組評估成功,Promise
將以完成值解決;如果模組評估失敗,則會被拒絕。如果評估的模組不是非同步的(即不包含頂層 await
)且沒有任何非同步的依賴項,返回的 Promise
將要麼被履行,要麼被拒絕。否則返回的 Promise
將保持 pending 狀態。
請查看 我們的解釋 以了解更多細節。
私人品牌檢查(#foo in obj
)
私人品牌檢查語法在 v9.1 中已預設啟用,不需要 --harmony-private-brand-checks
。此功能擴展了 in
運算符,使其也可以用於私人字段的 #
名稱,例如以下範例。
class A {
static test(obj) {
console.log(#foo in obj);
}
#foo = 0;
}
A.test(new A()); // true
A.test({}); // false
如果想了解更多細節,請確保查看 我們的解釋。
短內建函數調用
在此版本中,我們暫時在 64 位桌面機上關閉嵌入內建函數(撤銷 嵌入內建函數)。在這些機器上解除嵌入內建函數帶來的效能提升超過了內存成本。這是由於架構以及微架構的細節。
我們很快會發佈一篇獨立的博客,提供更多細節。
V8 API
請使用 git log branch-heads/9.0..branch-heads/9.1 include/v8.h
來查看 API 變更的清單。
擁有 V8 活動檢出版本的開發者可以使用 git checkout -b 9.1 -t branch-heads/9.1
來試驗 V8 v9.1 中的新功能。或是您也可以 訂閱 Chrome 的 Beta 頻道,並自己嘗試這些新功能。