You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome中Compile Script与Compile Code的区别及相关疑问

Chrome DevTools中Compile Script与Compile Code的区别及重复执行原因

一、两个编译步骤的具体操作

Compile Script

  • 这是V8引擎针对整个脚本文件/模块的初始编译操作,核心做这些事:
    • 对脚本源码做完整的语法解析,生成抽象语法树(AST)
    • 完成词法作用域分析、变量提升这类预处理工作
    • 生成基础字节码,同时标记出脚本里需要延迟处理的部分(比如未被调用的函数声明)
  • 这个阶段是对整个脚本资源的一次性处理,一般在脚本加载完成、即将执行前触发。

Compile Code

  • 这是V8对脚本内具体可执行代码片段的按需编译,属于懒编译环节:
    • 当脚本里的函数第一次被调用时,V8会针对该函数代码编译生成更高效的字节码甚至机器码
    • 也会处理eval代码、new Function()这类动态生成的代码的即时编译
  • 它只针对局部代码片段,不是对整个脚本的处理,触发时机是对应代码要执行前。

二、Compile Code执行两次的常见原因

  • 预解析+全解析的二次编译:V8为了加快页面启动速度,会先对函数做预解析(仅验证语法,不生成完整可执行字节码),当函数首次被调用时,再做全量编译生成可执行代码,这就会触发两次Compile Code事件
  • 热点代码的优化重编译:如果V8检测到某个函数被频繁调用(成为热点函数),会把之前生成的字节码重新编译成性能更高的机器码,这个优化编译过程会第二次触发Compile Code
  • 动态代码生成:如果脚本里有eval、动态创建函数这类逻辑,每生成一段新代码并执行时,都会触发Compile Code,自然可能出现多次执行的情况

三、官方性能文档未提及的原因

Chrome DevTools性能面板里的这类事件命名,是直接映射V8引擎的内部编译阶段术语,属于底层实现细节,面向前端开发者的通用性能文档不会覆盖这么深的引擎内部逻辑,要了解更细节的内容需要查看V8的官方技术文档或源码注释。

内容的提问来源于stack exchange,提问作者Kubo Ryoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:50:24