
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团队计画将此功能从文件层级延伸至函式层级,使开发者能更细緻地指定特定函式进行预编译。