Compilation Cache是V8在Isolate初始化时创建的核心编译缓存组件,缓存JavaScript源字符串到SharedFunctionInfo的映射,复用编译产物跳过parser/AST/bytecode/TurboFan全流程,显著降低CPU与内存开销。
Compilation Cache 是 V8 在 Isolate 初始化阶段创建的核心缓存组件,它不缓存执行结果,而是缓存「源码到编译产物」的映射——具体来说,是将 JavaScript 源字符串(如函数体)与对应的 SharedFunctionInfo(SFI)对象关联起来。当同一段代码(精确到字符序列)被多次编译时,V8 直接复用已编译好的 SFI,跳过整个 parser → AST → bytecode → TurboFan 优化编译流程,从而显著削减 CPU 时间和内存分配开销。
所谓“热点函数”,指在运行中被高频调用、且结构稳定(如工具函数、事件处理器、配置解析器等)的函数。Compilation Cache 对它们的加速体现在两个层面:
settings.json 或扩展贡献点,其中大量 JSON Schema 验证逻辑由内建 JS 函数实现(如 validateString、parseSchema)。这些函数体固定、调用频繁,V8 在首次编译后就将其 SFI 存入 Compilation Cache;后续同路径/同内容的模块加载直接复用,避免重复 parse 和 TurboFan 编译很多人误以为 Compilation Cache 类似 memoization(记忆化),其实不然:
add(1,2) 的返回值 3,而是保存 function add(a,b){return a+b} 这段字符串对应的完整编译产物(含字节码 + TurboFan 生成的机器码元数据)JSON.parse 包装层这类高频小函数,启用 Compilation Cache 后,其初始化耗时下降约 40%,主因是跳过了 AST 构建和 Ignition 字节码生成阶段Cache 命中依赖严格的源码一致性,以下操作会破坏缓存:
eval() 或 new Function() 动态拼接代码(每次生成新字符串,无法复用)--no-compilation-cache 或 Electron/VSC 内部禁用了 Isolate 共享(如某些调试模式)Compilation Cache 是 V8 实现“冷启动快”的底层支柱之一,它让稳定代码的第二次执行几乎等价于第一次优化后的执行,而不是重新走一遍完整的编译管线。对开发者而言,这意味着写结构清晰、复用率高的小函数,比堆砌大而全的模块更能受益于这一机制。