为了提高性能,JavaScript引擎有时仅在实际调用函数时完全解析函数。
例如,来自Spidermonkey源代码:
检查函数的语法比完全解析/发出快几倍,而且当页面包含大量从不执行的代码(经常发生)时,延迟解析会显着提高性能和内存使用率。
解析器在能够验证语法的同时可以跳过哪些步骤?
似乎在Spidermonkey中,一些节省来自不发送字节码,就像完全解析后一样。完整解析例如V8还包括生成机器代码?
答案 0 :(得分:4)
首先澄清一下:这两个步骤称为“预解析”和“完全解析”。 “懒惰解析”描述了先做后者的策略,然后在需要时做后者。
预解析速度更快的两个重要原因是:
解析器在准备代码生成时还有一些其他内部步骤,仅在检查错误时不需要,但上面两个是主要的点。
(完整)解析和代码生成是单独的步骤。