谷歌V8 JavaScript引擎7.4到7.6版本帶來大量改進

最近,谷歌V8 JavaScript引擎7.4、7.5和7.6版本增加了一些WebAssembly特性和JavaScript性能改進。

V8 7.4還增加了WebAssembly Threads/Atomics。Threads/Atomics最初作爲V8 7.0的實驗性特性,允許在多核架構上使用WebAssembly,支持Web的計算密集型進程。

Chrome 75爲WebAssembly添加了隱式緩存,允許從緩存中提取已經編譯好的WebAssembly模塊,而不是根據每個視圖重新編譯。V8的非Chromium用戶也可以使用Chromium提供的隱式緩存方案。

V8 7.5版本支持WebAssembly的大塊內存提案,該提案提供了更新大內存塊或表的新指令。

V8 7.4增加了對ECMAScript私有類字段語法的支持,這些字段在類之外不可訪問。

數值分隔符是一個新的特性提案,預計將在ES2020中實現,但現在V8 7.5已經支持該特性,使人類可以更容易地查看非常大的數字字面量。

V8 7.4還增加了對Intl.Locale的支持,Intl.Locale是ECMA-402國際化規範的一部分,爲管理地區和有效提取特定於地區的首選項提供了更健壯的機制。

V8 7.6改進了Intl.DateTimeFormat,提供了formatRange和formatRangeToParts方法,可以更容易地以特定於語言環境的方式格式化日期範圍,還可以添加timeStyle和dateStyle選項。

Promise.allSettled(promises)是V8 7.6中添加的一個新的JavaScript語言特性。當所有promise都完成(完成或拒絕)時,這個方法會發出信號。

現在,V8 7.6的toLocaleString方法和Intl.NumberFormat API都支持BigInt。

V8的最新版本對JavaScript的性能做了一些改進。

V8 7.6引入了大量與JSON.parse有關的更新,並提供高達2.7倍的解析速度提升。主要的變化是從遞歸式解析模型到迭代式解析的轉變。以前,在解析嵌套很深的JSON數據時,V8可能會將棧耗盡,而現在V8只受可用內存的限制。新的JSON解析器通過優化緩衝屬性提高了內存效率。

V8 7.4的改進爲參數不匹配的調用提供了更快的調用速度。JavaScript允許使用比正式聲明更少(應用不足)或更多(過度應用)的參數來調用函數。在應用不足的場景中,形參被賦值爲undefined,而在過度應用的場景中,則會忽略額外的參數。由於JavaScript函數可以通過arguments對象、rest參數等訪問實際參數,V8通過arguments適配器提供了對實際參數的訪問。現在,V8確定了一些不需要進行這種調整的場景(例如,callee是一個嚴格的模式函數),從而減少了高達60%的調用開銷。

在V8 7.4中,通過get函數直接調用本地訪問器比通過較慢的代碼路徑進行單態或超態屬性訪問要慢得多。V8通過調用本地訪問器提高了性能。

Chrome在下載大型腳本時會在工作線程上對其進行流式解析。V8 7.4修復了使用UTF8解碼的腳本的性能問題,平均提高了8%的解析速度。此外,在解析過程中會對屬性名進行去重。修復這個問題額外提高了10.5%的解析器性能,同時也提高了小型非流式腳本和內聯JavaScript的解析速度。

在Chrome 75中,V8直接將腳本從網絡加載到流解析器中,而不是等待Chrome主線程來處理。這個變更改進了JavaScript的解析性能,並減少了併發流解析任務的數量,進一步減少了內存消耗。

V8 7.6改進了數組indexOf、包含、延展和應用調用方面的性能,這篇文章提供了更多相關細節。

V8現在提供了一種無JIT模式,可以在不分配運行時內存的情況下執行JavaScript。通常,V8依賴於在運行時分配和修改可執行內存,這讓V8速度變得很快。但有些平臺,如iOS、智能電視和遊戲機,不允許非特權應用程序訪問可執行內存,可能是爲了減少應用程序的漏洞。從V8 7.4開始,通過–jitless標誌將V8切換到解釋器模式,可以在沒有運行時分配可執行內存的情況下執行JavaScript。WebAssembly目前不支持無JIT模式。

V8 7.4增加了字節碼沖刷功能,通過在垃圾回收期間沖刷不經常被執行的函數字節碼來減少V8的內存開銷。這個變更減少了5-15%的堆內存使用,而不會降低性能或顯著增加編譯JavaScript的CPU時間。

V8 7.4還改進了無效字節碼的消除。V8團隊解釋道:

雖然我們並不期望這會對用戶代碼有多大影響,但它對於簡化各種解調(如生成器、for-of和try-catch)特別有用。

在V8 7.6中,Unicode字符串處理得到了顯著的改進,比如String#localeCompare、String#normalize和各種國際化API調用。

谷歌每六週都會發布V8的分支版本,以配合谷歌Chrome的發佈。V8 7.4隨Chrome 74發佈, 7.5隨Chrome 75發佈,7.6隨Chrome 76發佈。V8還支持Node.js JavaScript運行時。

V8是開源的,由於外部依賴關係,提供了幾種許可協議。V8託管在GitHub上,歡迎開發者參與貢獻,但必須遵循V8的貢獻指南和谷歌的開源行爲指南

原文鏈接

V8 JavaScript Engine 7.4, 7.5, and 7.6 Adds Numerous Performance Improvements

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章