1. 程式人生 > >V8 JavaScript 引擎 7.2 Beta 版釋出,支援公共 class 欄位

V8 JavaScript 引擎 7.2 Beta 版釋出,支援公共 class 欄位

  

V8 JavaScript 引擎 7.2 已釋出,開發團隊表示目前尚處於 Beta 版階段,正式版將會於幾周後和 Chrome 72 Stable 一起推出。

V8 v7.2 提供了很多面向開發者的新特性,下面我們不妨簡單看一下。

記憶體

現在,在 ia32 架構中預設支援並啟用嵌入式內建函式(Embedded builtins)。

效能

JavaScript 解析

平均而言,網頁花費了 V8 啟動時所用時間的 9.5% 來解析 JavaScript。因此,7.2 版本專注為 V8 提供最快的 JavaScript 解析器,全面提高解析速度。從 7.0 開始,桌面上的解析速度提高了大約 30%。下圖顯示了過去幾個月 Facebook 載入基準測試的顯著改進。

Facebook.com 上的 V8 解析時間(越低越好)

開發團隊在不同場合都對解析器進行了優化,下圖顯示了幾個熱門網站上相對於最新 7.2 版本的改進。

總而言之,最近的改進將平均解析時間百分比從 9.5% 降低到 7.5%,從而加快了載入時間並提高了響應速度。

async/await

V8 v7.2 帶來了更快的 async/await 實現,並在預設情況下啟用。同時,開發團隊制定了一個規範提案,目前正在收集 Web 相容性資料,以便將更改正式合併到 ECMAScript 規範中。

WebAssembly

開發團第表示,在分析了許多 WebAssembly 基準測試後,最後選擇通過它們來指導頂級執行層中的程式碼生成。特別是,V8 v7.2 在優化編譯器的排程程式和後端迴圈旋轉(loop rotation)中啟用了節點拆分(node splitting)。此外,還改進了封裝器快取並引入了自定義封裝器,以減少呼叫匯入的 JavaScript 數學函式的開銷。最後,開發團隊設計了對暫存器分配器的更改,以改善許多程式碼模式的效能,這些程式碼模式將在更高版本中出現。

JavaScript 語言特性

V8 7.2 新增對公共 class 欄位(public class fields) 的支援,例如下面的舊寫法:

class Animal {
  constructor(name) {
    this.name = name;
  }
}
class Cat extends Animal {
  constructor(name) {
    super(name);
    this.likesBaths = false;
  }
  meow() {
    console.log('Meow!');
  }
}

現在可以這樣寫:

class Animal {
  constructor(name) {
    this.name = name;
  }
}
class Cat extends Animal {
  likesBaths = false;
  meow() {
    console.log('Meow!');
  }
}

計劃在未來的 V8 版本中支援私有類欄位(private class fields)。

詳細更新內容請檢視釋出公告:https://v8.dev/blog/v8-release-72