【问题标题】:What are Parse, Compile and Evaluate in DevTools Performance tool?DevTools 性能工具中的解析、编译和评估是什么?
【发布时间】:2018-07-28 18:18:42
【问题描述】:

在 Chrome 的性能选项卡中运行 JS 脚本时,我看到 JS 解释有三个步骤:ParseCompileEvaluate。 有时我只看到Evaluate,有时是CompileEvaluate,有时是三个全部。

我的问题是:

  • 每个步骤的实际含义是什么?
  • 为什么有时会缺少步骤? (例如,有时Parse 会丢失)

【问题讨论】:

  • 为什么这被否决了?我真的很乐意关注这个问题并看到一个好的答案。
  • @CodeAt30 可能是因为这是一个非常基本的编程问题,并且是您开始编程时应该学习的内容(什么是编程语言,它是如何工作的,什么是编译,什么是解析等.)。此外,通过搜索“什么是编译”之类的内容,应该很容易找到答案。
  • @cristy compilationJIT 完全不同。是的,如果您知道自己在寻找什么,您可以找到很好的资源。那你为什么不把它标记为to broad
  • @cristy 然后投票者应该自己解释他的推理,并标记它。我不明白无法解释的反对票。
  • 并不是我在乎反对票,但我真的不认为 javascript 解释是“基本编程”。我实际上认为大多数 JS 开发人员对浏览器实际上对他们的代码做了什么了解不够,而且我觉得我对它知之甚少(AST 等),但我的知识仍然有很多漏洞,即为什么我要问关于 SO 的问题。我显然知道一般的编译,只是不确定该术语在这种情况下的含义,因为这不是“标准”编译。无论如何,谢谢大家

标签: javascript performance google-chrome devtools


【解决方案1】:

解析:

js 引擎检查代码,确定所有不同的范围、变量声明等并对它们进行排序。在这一步也会发生吊装。基本上你的纯文本源代码变成了Abstract Syntax Tree (AST)

编译:

Chromes V8 使用 JIT 编译,这意味着 js 代码的某些部分被转换为字节码(直接在您的处理器上运行,中间没有任何抽象层)。这提高了性能。有时它可能决定直接运行代码而不编译它,例如如果编译它比实际运行未优化它需要更长的时间,那么就没有任何好处。

评估:

代码已运行。

继续阅读:

How V8 optimizes

Bytecode vs. Running directly

All together

【讨论】:

  • 谢谢!但话又说回来,为什么有些脚本有Parse 阶段而有些没有? (通过 Chrome 的性能选项卡查看时)这似乎是每个脚本都应该采取的关键阶段。
  • @EliranPe'er 好吧,我的假设是,如果脚本已经被解析并且没有更改 AST 或编译的字节码被缓存并重新使用而不是重新解析。同样,这取决于所使用的 JavaScript 引擎,您应该研究 V8 或 spidermonkey 以了解它们是如何工作的。
  • @eliran 我实际上希望其他人可以澄清这一点。我假设和 cristy 一样,但是 假设...
  • 我不认为这是一个缓存问题 - 脚本被加载一次并且不确定如何缓存它,对于其他脚本我得到Parse 阶段即使经过几次尝试(所以它应该已经被缓存了)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 2017-10-11
  • 2011-01-10
相关资源
最近更新 更多