天天看點

Google V8 JavaScript引擎版本7的新功能

Beta V8版本7.4現在可用,有潛力将引擎的功能擴充到Apple iOS等平台。 V8是Google針對Chrome浏覽器的開源JavaScript和WebAssembly引擎。 它在Chrome浏覽器和Node.js JavaScript運作時中都是必需的 。

在哪裡下載下傳Google V8

您可以從Chromium V8存儲庫下載下傳Google V8的正式版 。

[在InfoWorld上更深入: 超越jQuery:JavaScript架構專家指南 • Node.js架構的完整指南 • 10個必備JavaScript開發人員工具 • 6個最佳JavaScript IDE和10個最佳JavaScript編輯器 。 | 通過InfoWorld的App Dev Report新聞通訊了解程式設計方面的熱門話題。 ]

将來的版本:V8版本7.4中的新增功能

Google V8 beta 7.4将于2019年4月正式投入生産,它具有以下新功能:

  • 無需JIT的V8,其中支援JavaScript執行,而無需在運作時配置設定可執行記憶體。 這可以允許将V8擴充到Apple iOS,智能電視和遊戲機等平台上。 V8的預設配置依賴于在運作時配置設定和修改可執行記憶體的能力。 但是在某些情況下,可能希望在不配置設定可執行記憶體的情況下運作引擎,例如禁止禁止非特權應用程式(包括iOS)對不可執行記憶體進行寫通路的平台。 同樣,禁止對可執行記憶體的寫入會減少應用程式對漏洞的攻擊面。 在無JIT模式下,V8切換到JavaScript的僅解釋器模式; WebAssembly目前不支援此模式。 但是,無JIT模式确實會降低性能。
  • 現在,在非Android作業系統上啟用了WebAssembly線程/原子。 此舉通過WebAssembly釋放了對多個核心的使用,進而在Web上實作了計算量大的新用途。
  • 為了提高性能,版本7.4在某些情況下會跳過參數調整,進而将調用開銷減少了60%。
  • 調用本地通路器(即DOM通路器)的性能已得到改善。
  • 通過删除涉及屬性名稱的重複資料删除功能,提高了Preparser的性能。 此外,修複了涉及源流使用的自定義UTF-8解碼的性能問題。
  • 為了減少記憶體開銷,已實作了對在垃圾回收期間從函數中清除編譯後的位元組碼(如果最近未執行過)的支援。
  • 為了支援私有類字段,開發人員可以通過在字段前面加上

    #

    字首來将其标記為私有。

在哪裡下載下傳V8 7.4 Beta

您可以從Google的Chromium Git存儲庫下載下傳V8 Beta 。

目前版本:V8版本7.3中的新增功能

V8 7.3中的新功能包括:

  • --async-stack-traces

    标志預設情況下處于打開狀态。
  • 零成本的異步堆棧跟蹤使使用異步代碼更容易診斷生産中的問題; 現在通常将發送到日志檔案和服務的

    stack

    屬性提供對問題的更多了解。
  • await

    更快,預設情況下啟用

    --harmony-await-optimization

    标志。 這是

    --async-stack-traces

    的前提條件。
  • 通過優化加快WebAssembly的啟動速度。 對于大多數工作負載,編譯可提高15%到25%。
  • JavaScript功能包括

    fromEntries()

    和API

    String.prototype.Matchall

    ,這些函數可以執行

    Object.entries

    的逆操作,而API.API可以使全局或粘性正規表達式更容易地應用于字元串并周遊所有比對項。

目前版本:Google V8版本7.2的新功能

2019年1月的V8版本7.2改進了JavaScript解析,WebAssembly二進制格式和記憶體。

為了提高解析速度,V8版本7.2包含了Google稱為引擎有史以來最快JavaScript解析器,進而可以加快頁面加載速度和響應速度。 Google說,自V8 7.0版以來,桌面解析速度提高了約30%。

對于記憶體,現在在IA32體系結構上預設支援并啟用通過在多個隔離中共享生成的代碼來節省記憶體的嵌入式内置程式。

對于WebAssembly,V8 7.2具有代碼生成方面的改進,包括在優化的編譯器的排程程式中啟用節點拆分,并在後端進行循環旋轉。 此外,包裝緩存已得到改進,并引入了自定義包裝,以減少調用導入JavaScript數學函數時的開銷。

對寄存器配置設定器的設計更改提高了代碼模式的性能,這些代碼模式将在以後的版本中出現。 同樣,版本7.2中的陷阱處理程式可提高WebAssembly代碼的吞吐量。 它們在Windows,MacOS和Linux上實作。 在Chromium中,在Linux上啟用了它們,并在确認穩定性後跟随MacO和Windows。 計劃還要求它們在Android上可用。

V8 7.2中的其他新功能包括:

  • 當擴充元素出現在數組文字的前面時,它們的性能已得到改善。
  • 預設情況下,啟用更快的

    async

    /

    await

    實作。 更改可能會合并到官方ECMAScript規範中。
  • 零海岸異步堆棧跟蹤通過異步調用幀豐富了

    stack

    屬性。 在

    --async-stack-traces

    指令行标志後面可以使用此功能。
  • 支援公共類字段,該類擴充了JavaScript文法以簡化操作。
  • ListFormat

    建議,用于本地化清單的格式。
  • 現在,

    stringify

    輸出用于單個替代的轉義序列,進而使輸出有效為Unicode。

先前版本:Google V8版本7.1的新功能

2018年11月的V8版本7.1改進了記憶體和性能,并增強了JavaScript和WebAssembly二進制格式 。 對于記憶體,解釋器的位元組碼現在已嵌入二進制檔案中,每個隔離區平均節省約200KB。 為了提高性能,當來自周圍上下文的變量逃逸到局部閉包時,TurboFan編譯器中的逃逸分析得到增強,可以處理更高階函數的局部函數上下文。 通過轉義分析,可以對優化單元本地的對象執行标量替換。

V8版本7.1中的其他新功能:

  • 對于JavaScript,更新中提供的

    RelativeTimeformat

    API允許在不犧牲性能的情況下對相對時間(例如“昨天”)進行本地化格式化。 另外,版本7.1支援

    GlobalThis

    建議,提供了一種通用機制,即使在嚴格的功能或子產品中,無論平台如何,都可以通路全局對象。
  • 對于WebAssembly位元組碼格式,子產品支援

    postMessage

    。 此行為僅适用于Web Worker,而不能擴充到跨程序方案。

先前版本:Google V8版本7.0的新功能

2018年10月的V8版本7.0預覽了WebAssembly線程,該線程提供了用于并行計算的原語。 要在使用V8的Chrome浏覽器中使用線程,開發人員可以通過

chrome://flags/#enable-webassembly-threads

啟用它,或注冊Origin Trial ,以試驗新的Web功能。 WebAssembly(又名Wasm )使編譯以不同語言編寫的代碼可以在Web上運作。

V8 7.0中的其他新功能包括:

  • 對于JavaScript,

    description

    屬性被添加到

    prototype

    ,提供了一種更符合人體工程學的方式來通路描述。 此外,

    Array.prototype.sort

    在7.0版中也變得穩定。
  • 嵌入式内置擴充程式,可以通過在多個隔離中共享生成的代碼來節省記憶體。 V8版本6.9在X64體系結構上啟用了内置功能,而版本7.0将其擴充到了IA-32以外的其餘平台。

先前版本:Google V8版本6.9的新功能

2018年9月的V8版本6.9專注于Google JavaScript引擎的記憶體和性能改進。

為了節省記憶體,版本6.9為基于x64的計算機提供了嵌入式内置元件。 這些是所有隔離程式共享的功能,并且嵌入到二進制檔案本身中,而不是複制到JavaScript堆上,是以無論運作多少隔離程式,記憶體中僅存在一次。 V8的設計人員發現,x64計算機上前10,000個網站的堆大小平均減少了9%。 在以後的版本中将支援其他平台。

為了提高性能,V8 6.9版通過改進

WeakMap

處理來減少Mark-Compact垃圾回收的暫停時間。 并發和增量标記現在可以處理

WeakMaps

。 以前,這項工作是在Mark-Compact垃圾回收的最後一個原子暫停中完成的。 現在,垃圾回收還可以并行執行更多工作,以減少暫停時間。

為了提高性能,

DataView

方法已在V8 Torque中重新實作,與以前的運作時實作相比,節省了對C ++的昂貴調用。 此外,當将JavaScript編譯到TurboFan優化編譯器中時,現在會内聯到

DataView

方法的調用。 這為熱代碼提供了更好的峰值性能。

V8 6.9版還包括Liftoff,這是WebAssembly可移植代碼格式的基準編譯器。 預設情況下啟用它,旨在通過盡快生成代碼來減少基于WebAssembly的應用程式的啟動時間。 代碼本身的品質是Liftoff的第二要務,最終代碼将由V8的TurboFan編譯器重新編譯。

開發Liftoff是為了解決TurboFan的編譯過程的後端消耗大量時間和記憶體,進而降低WebAssembly代碼性能的問題。 Liftoff避免了中間表示的時間和記憶體開銷,進而一次通過WebAssembly函數的位元組碼生成機器代碼。 Liftoff和Turbofan為V8提供了兩個編譯層,Liftoff提供了用于快速啟動的基準編譯器,而TurboFan提供了性能優化。

Google還計劃進一步縮短啟動時間,減少記憶體消耗,并為更多使用者帶來Liftoff的好處。 這些計劃涉及用于移動裝置的ARM處理器的端口。 目前,Liftoff僅适用于Intel 32位和64位平台。 正在考慮的其他改進包括:

  • 為移動裝置實作動态分層,以容納這些裝置上的較低記憶體量。 實驗正在進行中,結合了帶有Liftoff的惰性編譯和TurboFan中熱功能的動态分層。
  • 提高Liftoff代碼生成性能,并同時改進生成的代碼。

先前版本:V8版本6.8中的新增功能

2018年7月釋出的Google V8版本6.8專注于性能和記憶體使用情況。

陣列解構性改進提高了性能。 優化編譯器尚未生成用于數組解構的理想代碼,是以V8的生成器阻止了轉義分析以消除臨時配置設定,這使得使用臨時數組進行數組解構的速度與配置設定序列一樣快。

通過實作JavaScript的快速路徑,Object.assign的新實作提高了性能。

使用比較功能進行排序時,TypedArrays的性能得到了提高。

V8版本6.8中的其他新功能包括:

  • 為了提高WebAssembly可移植代碼格式的執行速度,開發人員可以在Linux x64平台上使用基于陷阱的邊界檢查(記憶體管理優化)。
  • 通過壓縮和删除不必要的字段,減少了

    SharedFunctionInfo

    SharedFunctionInfo

    )的記憶體消耗。
  • 為了提高記憶體功能,還打破了對SFI的依賴性,在這種依賴性下,SFI不必要地保持活動狀态,這導緻了記憶體洩漏的風險。

先前版本:V8版本6.7的新增功能

Google的V8 JavaScriptengine通過版本6.7分支獲得了語言功能和安全性的增強,該分支現已投入生産。

V8 6.7引擎預設情況下啟用了

BigInt

支援。 預期在ECMAScript的未來版本中,

BigInts

可用作JavaScript中的數字原語,以任意精度表示整數。 使用

BigInt

,可以執行整數運算而不會溢出。

BigInt

可以用作最終

BigDecimal

實作的基礎,可用于以十進制精度表示金額。

V8 6.7中還提供了針對邊通道漏洞的更多緩解措施,旨在防止資訊洩露給JavaScript和WebAssembly不受信任的代碼。

先前版本:V8版本6.6中的新增功能

Google的V8 JavaScript引擎6.6版側重于JavaScript語言功能和代碼緩存功能。

對于JavaScript,

Function.prototype.toString()

傳回源代碼文本的确切片段,包括空格和注釋。 V8版本6.6還實作了

String.prototype.trimStart() and String.prototype.trimEnd()

。 此功能可通過非标準

trimLeft()

trimRight()

方法獲得,它們仍然是新方法的别名,以實作向後相容。

此外,可以在字元串文字中使用行和段落分隔符,進而比對JSON 。 以前,這些已被視為字元串文字中的行終止符,它們的使用導緻SyntaxError異常。

Array.prototype.values

方法為數組提供與ECMAScript 2015

Map

Set

集合相同的疊代接口。 這些可以通過

keys

values

entries

通過調用同名方法進行互動。 此更改可能與現有JavaScript代碼不相容; 在網站上發現異常或損壞行為的開發人員可以嘗試通過

chrome://flags/#enable-array-prototype-values

禁用此功能。

From: https://www.infoworld.com/article/3252818/whats-new-in-googles-v8-javascript-engine.html

繼續閱讀