
程序离开开发人员的编辑器后,会经过几次转换,然后才由 JavaScript (JS) 引擎执行:
流程摘要
通过 Babel 进行转译:将现代 JavaScript 转换为旧版本以实现兼容性。通过 Webpack 打包:将转译的代码和项目资产捆绑成可部署的文件。JS 引擎解析:将代码分解为标记并生成抽象语法树 (AST)。Ignition 的字节码生成:将 AST 转换为字节码,以便进行有效解释。Ignition 解释:执行字节码,实现快速程序启动。TurboFan 的即时编译:将热代码优化为机器代码,以实现最佳性能。执行:优化后的机器代码由CPU直接执行。1. 通过 Babel 进行转译
描述:Babel 是一种流行的工具,用于将现代 JavaScript 代码(使用最新的语言功能编写)转换为可在旧版浏览器或环境中运行的向后兼容版本。此过程称为转译。输出:转换后的 JavaScript 代码。2. 使用 Webpack 打包(以及其他构建过程)
描述:Webpack 是现代 JavaScript 开发中常用的模块打包程序。它从 Babel 获取转译后的代码以及其他项目文件(样式表、图像等),并将它们打包成单个输出文件或多个文件,以备部署。输出:捆绑的 JavaScript 文件以及其他资产。JS 引擎处理
一旦捆绑的 JavaScript 代码被传送到 JS 引擎,就会发生以下步骤:
3. 解析(标记化和 AST 生成)
标记化(词汇分析):代码被分解成更小的单位,称为标记。每个标记代表一个特定的语法元素(例如变量、运算符或关键字)。语法分析(AST 生成):使用标记创建抽象语法树 (AST),该树表示代码的语法结构。此步骤还会检查程序中的语法错误。输出:代码的 AST 表示。4. Ignition 生成字节码(中间表示)
描述:AST 由 Ignition 解释器处理,并转换成字节码(代码的紧凑中间表示)。此字节码旨在由引擎高效执行。输出:字节码已准备好由 Ignition 执行。5. 点火解释
描述:上一步生成的字节码由 Ignition 解释器执行。通过直接解释字节码指令,可以快速启动程序。输出:执行字节码的结果。6. TurboFan 的即时编译
描述:在执行过程中,会识别出经常使用的代码路径(热代码)。这些热路径由 TurboFan JIT 编译器进行优化,该编译器将字节码编译为目标平台的机器码。此步骤可显著提高热代码的性能。输出:优化的机器代码。7. 机器代码的执行
描述:优化的机器代码由CPU直接执行,为程序提供最佳的性能。输出:最终的程序结果。执行管道中的关键概念
标记化:在解析阶段将代码分解为可识别的单元(标记)。AST 生成:创建代码的结构化表示以供进一步处理。字节码:用于 Ignition 快速解释的中间表示。JIT 编译:TurboFan 将热代码编译为优化的机器代码,以便更快地执行。执行:JavaScript 代码产生其期望结果的最后阶段。V8 引擎将解释和编译相结合,以平衡启动速度和执行性能。管道从 Ignition 的解析和字节码生成开始,然后进行解释,并通过 TurboFan 过渡到针对热门代码路径的优化机器码执行。这种动态方法可确保在现代应用程序中高效执行 JavaScript。