Google旗下的JavaScript引擎V8引入一項名為Explicit Compile Hints的新功能,允許開發者透過特定註解指示V8在載入JavaScript檔案時,預先編譯其中所有會在頁面載入階段被呼叫的函式,以加速網頁初始載入效率,該功能已隨Chrome 136釋出。

在既有的V8執行邏輯,V8會在載入階段決定每個JavaScript函式的編譯時機,是否要立即編譯(Eager Compilation),或延後至實際執行時才編譯(Lazy Compilation)。當選擇延後編譯,函式首次被呼叫時,主執行緒需等待V8完成編譯後才能繼續執行後續邏輯,這在特定情境下可能導致頁面反應延遲,特別是在初次載入過程即需執行的函式較多的情況。

此次新增的註解標籤//# allFunctionsCalledOnLoad,開發者可明確告知V8,特定檔案中的函式會在頁面載入時被呼叫,進而啟用預編譯。這項提示會讓V8在載入期間,於背景執行緒進行完整的語法解析與編譯,並與網路請求的下載作業交錯執行,減少主執行緒的等待時間。

官方實驗顯示,在針對20個熱門網站進行測試時,有17個網頁的JavaScript載入效能明顯改善,平均可減少約630毫秒的前景解析與編譯時間。

這項機制的重點在於精準控制JavaScript的編譯時機。JavaScript語法複雜,即便是判定函式結尾位置,也無法僅靠括號配對而須完整解析語法結構,因此當預先進行語法解析卻不馬上編譯,將導致重複工作與資源浪費。而Explicit Compile Hints讓V8在判斷時能更有依據,避免過度依賴啟發式策略所帶來的不確定性。

不過,V8團隊也提醒開發者此功能應謹慎使用。當過多函式被設定為預編譯,不僅會增加記憶體使用,也可能導致背景執行緒負載過重,反而影響整體效能。因此,理想的使用情境是將初始載入過程,確定會執行的關鍵函式集中於單一核心檔案,並對該檔案加註註解,以最大化效果。

V8團隊計畫將此功能從檔案層級延伸至函式層級,使開發者能更細緻地指定特定函式進行預編譯。

熱門新聞

Advertisement