以前網頁的效能瓶頸在於網路,但現今效能瓶頸卻是在CPU,尤其是在主執行緒上,執行解析以及編譯的工作。

Firefox 57使用了Quantum引擎後,速度已是Firefox 52的兩倍,而Mozilla表示,Firefox 58將加入串流編譯以及分層編譯技術,讓網頁程式執行速度更快。

Mozilla引用,曾在Google擔任效能總監與Yahoo!首席效能官,現任於SpeedCurve的Steve Souders的觀點表示,以前網頁的效能瓶頸在於網路,但現今效能瓶頸卻是在CPU,尤其是在主執行緒上,執行解析以及編譯的工作。

因此Mozilla認為,要解決這個問題有兩種想法,其一便是分擔主執行緒的工作,其二是盡可能越早開始工作,就能讓工作越早結束。對於主執行緒來說,處理Javascript負擔較大,雖然解析的工作可以交給次執行緒,但是主執行緒編譯的工作仍必須要等到解析結束,這過程需要一些時間,導致在執行時間(Runtime)的Javascript編譯延遲時間較明顯。

WebAssembly在於準備的動作簡單很多,解碼(Decode)也比解析快速,而且可以同時在多執行緒彙整結果,這也是WebAssembly執行速度比Javascript快上許多的原因。

新的串流編譯器要強化WebAssembly早工作早結束的特性。在之前,瀏覽器網路層在下載.wasm檔案時,會將其先放進ArrayBuffer中,待ArrayBuffer滿後才會丟給Web VM開始後續編譯的工作,Mozilla認為,讓編譯器等待並非有效率的事,Firefox 58新的編譯器能夠下載一行程式碼就編譯一行,讓下載與編譯工作能夠同時執行,另外,.wasm模組的程式碼區塊會被優先傳輸,資料部分則會被擺在後面,Mozilla表示,當資料區塊占檔案很大部分時,就能得到很大的效能優勢。

而分層編譯器則能讓編譯工作平行化,第一層編譯器專做編譯工作,而第二層編譯器則會在第一層編譯器開始工作後,開始以較慢的速度編譯程式碼,但是同時產生較多的最佳化程式碼,當第一層編譯器完成手上的工作,便會接手第二層編譯器所輸出的最佳化程式碼,以更快的速度完成編譯。

經Mozilla測試,分層編譯器將比原本的編譯器速度快10到15倍,應用串流編譯以及分層編譯兩種技術後,桌面版本的Firefox將可以每秒編譯30到60MB的WebAssembly程式碼,也就是說程式碼的編譯速度將快過網路下載速度,程式碼下載完程式碼也就編譯完了。

熱門新聞

Advertisement