【发布时间】:2020-10-22 09:53:51
【问题描述】:
使用传统方法,在我的机器上执行这个递归斐波那契函数大约需要 9.5 秒:
const fib = n => {
if (n == 1) return 0;
if (n == 2) return 1;
return fib(n - 1) + fib(n - 2);
};
console.log(fib(45));
➜ time node index.js
701408733
node index.js 9,50s user 0,04s system 99% cpu 9,566 total
但是,当我将函数体包装在另一个立即执行的函数中时,执行时间会下降到 7.5 秒:
const fib = n => {
return (() => {
if (n == 1) return 0;
if (n == 2) return 1;
return fib(n - 1) + fib(n - 2);
})();
};
console.log(fib(45));
➜ time node index.js
701408733
node index.js 7,58s user 0,25s system 99% cpu 7,852 total
这是一个巨大的加速(~30%!),但我不明白为什么包装函数会产生这种差异。
【问题讨论】:
-
也许值得使用 devtools 对其进行分析
-
另外,也许每次都值得使用一个新的节点实例 - 事情变得温暖
-
好主意。我试试看。
-
你多久做一次这个测试?
-
为什么一个运行9566次,另一个运行7852?
标签: javascript node.js