首页 文章

是什么使得预解析函数比完整解析更快?

提问于
浏览
0

为了提高性能,JavaScript引擎有时仅在实际调用函数时完全解析函数 .

例如,从Spidermonkey源代码:

检查函数的语法比完全解析/发出快几倍,而且当页面包含大量从不执行的代码(经常发生)时,延迟解析会显着提高性能和内存使用率 .

解析器在能够验证语法的同时跳过哪些步骤?

似乎在Spidermonkey中,一些节省来自不发送字节码,就像完全解析后一样 . 完整解析例如V8还包括生成机器代码?

1 回答

  • 4

    首先澄清一下:这两个步骤称为“预解析”和“完全解析” . “懒惰解析”描述了首先执行前者的策略,然后在需要时执行后者 .

    预解析更快的两个主要原因是:

    • 它不构建AST(抽象语法树),它通常是解析器的输出

    • 它没有为变量做范围解析 .

    解析器在准备代码生成时还有一些其他内部步骤,仅在检查错误时不需要,但上述两个是主要要点 .

    (完整)解析和代码生成是单独的步骤 .

相关问题