在阅读Quintus game engine的源代码时,我发现它们大量使用for循环,而不是本机forEach。
我最初的想法是原生forEach方法会比循环的标准方法稍微快一点。然而,在用these benchmarks测试了我的理论之后,for循环结构似乎要快得多。
在四处打探之后,我似乎找不到引擎盖下面发生了什么。有没有人知道造成这种巨大差异的原因?
编辑:明确地说,我问的是“为什么”是这种情况。我不是在问“哪个更快”。
发布于 2014-03-04 03:24:22
forEach在内部包含许多检查,并不像简单的循环那样直接。
有关详细信息,请参阅the Mozilla Javascript reference:
if (!Array.prototype.forEach)
{
Array.prototype.forEach = function(fun /*, thisArg */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++)
{
if (i in t)
fun.call(thisArg, t[i], i, t);
}
};
}
发布于 2017-05-09 07:12:46
感谢您粘贴实现;答案就在这里:fun.call
比fun
慢,而且i in t
测试成本很高。
似乎已经如此努力地解决不常见的情况,以至于最终的结果对于普通用户来说太昂贵了。
https://stackoverflow.com/questions/22155280
复制相似问题