Javascript 在DevTools性能工具中,什么是解析、编译和评估?

Javascript 在DevTools性能工具中,什么是解析、编译和评估?,javascript,performance,google-chrome,devtools,Javascript,Performance,Google Chrome,Devtools,在Chromes的性能选项卡中运行JS脚本时,我看到JS解释有三个步骤:Parse、Compile和Evaluate。 有时我只看到评估,有时是编译和评估,有时是全部三个 我的问题是: 每一步实际上意味着什么 为什么有时会缺少步骤?(例如,有时缺少Parse) 解析: js引擎检查代码,确定所有不同的作用域、变量声明等,并对它们进行排序。在这一步中,也会发生提升。基本上,您的纯文本源代码被转换为 汇编: ChromesV8使用JIT编译,这意味着js代码的某些部分被转换成字节码(直接在处理器上

在Chromes的性能选项卡中运行JS脚本时,我看到JS解释有三个步骤:
Parse
Compile
Evaluate
。 有时我只看到
评估
,有时是
编译
评估
,有时是全部三个

我的问题是:

  • 每一步实际上意味着什么
  • 为什么有时会缺少步骤?(例如,有时缺少
    Parse
    • 解析:

      js引擎检查代码,确定所有不同的作用域、变量声明等,并对它们进行排序。在这一步中,也会发生提升。基本上,您的纯文本源代码被转换为

      汇编:

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

      评估:

      代码正在运行

      请继续阅读:


      为什么会被否决?实际上,我非常乐意回答这个问题,并看到一个好的答案。@CodeAt30可能是因为这是一个非常基本的编程问题,并且是开始编程时应该学习的内容(什么是编程语言,它是如何工作的,什么是编译,什么是解析,等等)。此外,通过搜索“什么是编译”之类的内容也很容易找到答案。@cristy well
      compilation
      JIT
      是完全不同的。是的,如果你知道你在寻找什么,你可以找到好的资源。那么你为什么不把它标为博德的?@cristy那么,投否决票的人应该自己解释他的理由,并把它标出来。我不明白无法解释的下落。我不在乎投票失败,但我真的不认为JavaScript解释是“基本的编程”。事实上,我认为大多数JS开发人员对浏览器在代码中的实际功能了解得不够,我觉得我对它知之甚少(ASTs等),但我的知识中仍有很多漏洞,这就是为什么我要问这些问题的原因。我显然知道编译的一般含义,只是不确定这个术语在本文中的含义,因为这不是“标准”编译。无论如何,谢谢大家!但话说回来,为什么有些脚本有
      Parse
      阶段,而有些脚本没有?(通过Chromes的“性能”选项卡查看时)这似乎是每个脚本都应该采取的关键阶段。@EliranPe'er好吧,我的假设是,如果脚本已经解析并且没有更改AST或编译的字节码,则会缓存并重新使用,而不是重新解析。同样,这取决于所使用的JavaScript引擎,您应该查看V8或spidermonkey,看看它们是如何工作的。@eliran我实际上希望其他人能够澄清这一点。我假设与cristy相同,但我们假设……我不认为这是缓存问题——脚本只加载了一次,不确定如何缓存,而对于其他脚本,即使尝试了几次,我也会得到
      Parse
      阶段(所以应该缓存它)