【发布时间】:2019-06-18 03:12:14
【问题描述】:
function* test() {
console.time("function-call")
loop();
console.timeEnd("function-call");
console.time("in-function");
var i, j;
i = 0;
while (i < 10000) {
j = 0;
while (j < 10000) {
j++
}
i++;
}
console.timeEnd("in-function");
}
function loop() {
var i, j;
i = 0;
while (i < 10000) {
j = 0;
while (j < 10000) {
j++
}
i++;
}
}
test().next();
我复制了“循环”中的代码块,并粘贴到“测试”函数中以比较时间。
function-call: 84ms
in-function: 596ms
调用函数比在函数内部循环要快得多。为什么会这样?
【问题讨论】:
-
我的猜测是优化器意识到你的循环函数没有做任何事情(
i和j不能在循环外访问,循环内什么也没有发生),所以它是优化了。但是由于某种原因,当循环处于更大的上下文中时,相同的优化不会捕获。 -
在 Chrome(v8 引擎)上,in-function 稍快。在 Firefox 上,我复制了您的结果。有趣的问题
-
@JoachimSauer 实际上,我有类似的代码块可以做一些事情。我准备了一个简化版来问。
-
在节点 js 函数调用上测试:154.183ms,函数内:152.907ms,@Cory,你能附加你的原始代码吗。
-
有趣的是,将
in-function函数包含在 IIFE 中,它运行得更快。所以@JoachimSauer 的猜测可能是 100% 正确的。也许我们不应该问为什么function-call更快,但为什么in-function更慢
标签: javascript firefox v8 geckodriver firefox-quantum