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

标签 javascript performance parsing v8

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

例如,来自Spidermonkey源代码:

Checking the syntax of a function is several times faster than doing a full parse/emit, and lazy parsing improves both performance and memory usage significantly when pages contain large amounts of code that never executes (which happens often).

解析器可以跳过哪些步骤,同时仍然能够验证语法?

在 Spidermonkey 中,一些节省似乎来自于不发出字节码,例如在完整解析之后。进行完整解析,例如V8还包括生成机器代码吗?

最佳答案

首先澄清一下:这两个步骤称为“预解析”和“完全解析”。 “惰性解析”描述的是先进行前者,需要时再进行后者的策略。

预解析速度更快的两大原因是:

  • 它不会构建 AST(抽象语法树),而 AST 通常是解析器的输出
  • 它不会对变量进行作用域解析。

解析器在准备代码生成时还完成了一些其他内部步骤,仅在检查错误时不需要这些步骤,但以上两个是要点。

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

关于javascript - 是什么使得预解析函数比完整解析更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41824243/

相关文章:

控制台中的 Javascript 生成器语法错误

parsing - 什么类型的语法用于解析 PostgreSQL?

java - 有没有一种简单的方法可以将此文本解析为 map

javascript - window.onchange - 是什么触发了它,删除它是否安全?

javascript - 从段落中删除完整的一个字符串

javascript - 如何使用 JQuery 应用的 CSS 类正确创建可编辑的 "Font Tester"类型编辑器?

excel - CurrentRegion.SpecialCells(xlCellTypeVisible) 太慢 - 提高性能的提示?

c# - 使用泛型的 C# 方法多态性的性能

c++ - C++ 中的 Random() 效率

java - 将 xls 文件中的数据插入 SQLite android 时出错