javascript - 在 Node.js 中,为什么第二次调用函数所需的时间比第一次调用要少得多?

标签 javascript node.js

const {performance} = require('perf_hooks');

const nemo = ['nemo'];

function findNemoArray(array) {
  let t0 = performance.now();
  for (let i = 0; i < array.length; ++i) {
    if (array[i] === 'nemo') {
      console.log("Found nemo")
    }
  }
  let t1 = performance.now();
  console.log("Call to find nemo took", t1-t0, "milliseconds");
}

findNemoArray(nemo);
findNemoArray(nemo);

输出:

$ node findNemo.js
Found nemo
Call to find nemo took 6.692564999684691 milliseconds
Found nemo
Call to find nemo took 0.09663600008934736 milliseconds

我不明白为什么第二个调用比第一个调用花费的时间要少得多?

最佳答案

这是 v8 引擎优化。

您可以深入阅读the v8 profilingIgnition and Turboban管道(当然 Nodejs 也使用)

node --prof yourScript.js
# it will produce a log file that you can read by
node --prof-process isolate-00000221B52EB170-26268-v8.log > readable.txt

关于javascript - 在 Node.js 中,为什么第二次调用函数所需的时间比第一次调用要少得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64571553/

相关文章:

javascript - 从服务器到客户端的 UTC 偏移量

javascript - 如何使用cheerio和nodejs在解析的HTML中查找特定的JavaScript代码?

javascript - 为什么 bootstrap 4 slider 工作不顺畅?

javascript - 触发的更改事件未触发 RiotJs 附加处理程序

javascript - Internet Explorer 在将函数分配给 "onfocusout"事件时出现滞后

javascript - 无法让 page.injectJs() 在 PhantomJS 中工作

javascript - 在没有babel的情况下要求 Electron 文件

node.js - jhipster/spring boot - 尝试代理请求时发生错误

javascript - 有没有办法在Javascript中同步等待递归异步函数的完成?

Child_process 没有捕获二进制文件输出?