Chrome瀏覽器的(PGO)技術是怎麼樣的?

Chrome瀏覽器的(PGO)技術是怎麼樣的

在十一月初Chrome V54版正式發布的公告里,提到說「Windows版Chrome現在達成提速15%的目標,這主要得益於Profile Guided Optimization (PGO)技術的應用」具體來說是「Chrome啟動速度提升16.8%,新標籤載入速度提升14.8%」(參考http://news.mydrivers.com/1/505/505512.htm?_t=t)

我們搜索「Profile Guided Optimization」,發現在MSDN里有關於這項編譯優化技術的描述(https://msdn.microsoft.com/en-us/library/e7k32f4k.aspx),以及chromium發布blog(https://blog.chromium.org/2016/10/making-chrome-on-windows-faster-with-pgo.html),我們知道它是利用了微軟的這項技術優化實現的,提供方式是通過Visual Studio編譯環境來提供。

先看chromium發布blog中的大意是說:

Chrome已經是個很大的項目了,源碼中有超過一百萬個函數,而這一百萬個函數呢,被調用的頻率是不一樣的,有的頻繁,有的很少被用到。而PGO使用運行時的執行數據來監測看哪個函數最值得優化。

為了收集這些數據,每晚的構建過程會產生一個特殊版本的Chrome,來監測函數使用情況。然後PGO會為了速度而優化高使用率的函數,有時候這樣會增加那些函數的二進位位元組大小。為了平衡掉這種增加,PGO還優化那些很少使用雖然功能小,但速度稍慢的代碼。這樣權衡的結果是得到了更高的整體性能,和一個較小整體代碼量。

PGO還優化了代碼在內存中的分布,把很少使用的函數移動到離頻繁使用的較遠的內存中。這也通過不讓較少用到的代碼被緩存,從而更優地使用CPU指令緩存,以增強整體表現。PGO也還用到了很多別的技巧讓Chrome更快,全都加在一起才實現了如今的成績。

那總的來說呢,就是基於運行過程中各個函數的調用頻率情況統計,來指導其進行優化,比如說將調用頻率高的放在訪問速度快的區域,調用頻率低的先靠邊。



推薦閱讀:

chrome默認禁止flash的意圖是什麼?
Microsoft Edge 的使用體驗如何?與 Chrome、 Firefox 相比有哪些優缺點?
如何修改Chrome里Google搜索的國家和地區設置?
請問現在幾大瀏覽器到底哪個好用?
Chrome 總是崩潰的原因可能是什麼?

TAG:瀏覽器 | 互聯網 | chrome | GoogleChrome | 網頁瀏覽器 |