V8如何度量真實數據性能

273363464 7年前發布 | 7K 次閱讀 JavaScript開發 JavaScript

網頁渲染性能對于用戶體驗非常重要,V8引擎一直在通過各種基準測試驗證和優化JavsScript。2017年,V8將引入真實場景度量,以更好針對真實場景進行優化。

有一句老格言說得好:“有度量才有改進”。這對于JavaScript虛擬機來說也非常適用。對于虛擬機開發團隊來說,選擇一個合適的度量方式對于指導性能優化非常必要。JavaScript度量方式從最初的微基準測試到后來的靜態測試集,直到V8即將采用真實網頁。

和其他JavaScript引擎類似,V8也通過合成基準測試來度量性能指標。剛開始,引擎開發者使用諸如 SunSpider 、 Kraken 等微基準測試框架;隨著瀏覽器市場的發展,基準測試進入了新紀元,諸如 Octane 、 JetStream 等更加大型的框架被使用,但是它們仍然屬于合成基準測試引擎。

微基準和靜態測試集有它們的優勢:它們非常容易理解,運行方便,能夠在任意瀏覽器中執行,容易進行對比。但它們也有很大的劣勢:測試用例非常有限,難以模擬現實中眾多復雜的網頁;另外,基準測試需要經常變化,以滿足不停進化的前端框架和前端技術;最后,基于基準測試分數的優化,對于真實用戶或者前端開發者來說不一定有感知。

通過WebPageReplay和運行時調用狀態來度量真實的網頁性能

基于上述傳統基準測試的缺陷,V8團隊通過加載真實網站頁面來度量真實性能。最終,他們通過基于Chrome的組件 WebPageReplay 來錄制網頁請求,并按照需求進行回放。

隨后,配合WebPageReplay組件,他們又開發了稱為運行時調用狀態(Runtime Call Stats)的工具,以記錄不同JavaScript代碼在執行時實際使用到的V8組件。有了這個工具的幫助,不僅能夠讓使用真實網站來測試V8變得更加方便,同時能夠完美展示為了V8在執行不同JavaScript代碼時會表現的不同。

目前,V8團隊已經使用了將近25個網站進行性能度量,來指導V8的優化。這些網站,是從Alexa前100名中,以使用JavaScript框架(React、Polymer、Angular、Ember等等)、地理位置分布以及開發團隊與V8團隊有合作等因素最終挑選出來。

想要深入了解網頁和運行時調用狀態的測試集開發詳情,請收看 BlinkOn 6演講:真實世界性能 。讀者也可以自己 執行運行時調用狀態工具 。

和真實網頁加載的區別

通過運行時調用狀態工具,可以直觀的觀察到真實網站性能度量數據,并能夠和傳統基準測試進行比較,了解不同JavaScript執行時V8的內部情況。

從這些對比數據上,我們會發現性能基準測試工具Octane和實際25個測試網站相比差別很大。從下面的圖表可以看出,Octane的顏色區域和其他網站測試結果相差很大。當運行Octane時,V8的瓶頸在于JavaScript代碼執行,然而在處理真實網頁時,V8的瓶頸卻是解析和編譯。如此大的差別最終會導致針對V8的優化效果不佳,甚至 產生反效果 。

從這個圖表還能發現,相比于Octane, Speedometer 和現實數據更加接近。Speedometer是一個WebKit的基準測試庫,其中包含使用了React、Angular、Ember等框架編寫的測試用例,和實際的25個網站獲得的數據比較匹配。

最終目的:更快的V8引擎

在過去一年中,基于真實網站的測試集和運行時調用狀態工具已經幫助V8有了大約10%~20%的性能提升。由于之前的優化主要著關注于Chrome的頁面加載優化,2位數的性能提升已經是個不錯的成績了。這些優化同樣使得Speedometer性能基準測試的分數提升了20%~30%。

這些性能的提升,對于使用現代JavaScript框架(或者類似模式JavaScript代碼)的網站會有明顯反應。其他一些提升,如JavaScript內置功能Object.create和Function.prototype.bind的優化、圍繞著對象工廠模式的優化、V8引擎的 內聯緩存 功能實現、實時解析器優化等,對于普通JavaScript執行性能優化也有幫助。

V8團隊將持續使用真實網站加載性能來指導V8引擎優化。

 

 

來自:http://www.infoq.com/cn/news/2017/01/V8-measure-performance-data

 

 本文由用戶 273363464 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!