Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这种迭代方法更快?_Javascript_Performance - Fatal编程技术网

Javascript 为什么这种迭代方法更快?

Javascript 为什么这种迭代方法更快?,javascript,performance,Javascript,Performance,我的问题相对简单。但我怀疑答案将是复杂而有趣的。我有两个在Javascript中迭代循环的片段 片段A: //Fast var l = arr.length; for (var x = 0; x < l; x++) { dosmth = arr[x]; } 代码段B明显比代码段A快。为什么?我怀疑这是因为代码段A中有更多的范围或上下文更改。但我找不到任何关于它的文档。要扩展我的评论,后者可能没有进行任何迭代,因为检查是翻转的。在第一个对话框中,您正在检查xl。为了扩展我的评论,后

我的问题相对简单。但我怀疑答案将是复杂而有趣的。我有两个在Javascript中迭代循环的片段

片段A:

//Fast
var l = arr.length;
for (var x = 0; x < l; x++) {
    dosmth = arr[x];
}

代码段B明显比代码段A快。为什么?我怀疑这是因为代码段A中有更多的范围或上下文更改。但我找不到任何关于它的文档。

要扩展我的评论,后者可能没有进行任何迭代,因为检查是翻转的。在第一个对话框中,您正在检查xl。

为了扩展我的评论,后者可能没有进行任何迭代,因为检查是翻转的。第一个检查xl。

您错过了一个稍微快一点的版本,只有一个变量和一个隐式检查,但它会向后运行

var i = array.length;
while (i--) {
    dosmth = arr[x];
}

您错过了一个稍微快一点的版本,它只有一个变量和一个隐式检查,但它是反向运行的

var i = array.length;
while (i--) {
    dosmth = arr[x];
}

似乎您的逻辑检查被翻转了xl5次向上投票,仅仅是因为一个避免了所有迭代的输入错误?因为在代码段B中循环没有运行。我想有个打字错误。用0初始化x,因此x>l永远不会为真。如果这是你的真实代码,我会加上这个作为答案,但我怀疑你的意思是X最快的代码就是不能运行的代码。@Stephen问一个关于速度差异的好问题应该提到测试过的引擎,输入,基准测试的结果,比如你的逻辑检查,会被翻转xl5,这仅仅是因为一个避免了所有迭代的打字错误?因为在代码段B中循环不会运行。我想有个打字错误。用0初始化x,因此x>l永远不会为真。如果这是您的真实代码,将添加此作为答案,但我怀疑您的意思是X最快的代码是无法运行的代码。@Stephen问一个关于速度差异的好问题应该提到测试的引擎、输入和基准测试的结果。我读到,当您向后迭代数组时,一些引擎将底层数据结构切换为哈希,这会更糟。因此,我建议不要使用这种微优化方法。如果没有适当的分析和测试,就不要进行优化。首先,我想你指的是arr[x]。第二,在今天的硬件上,我不相信这会更快(甚至更慢),但为什么引擎要使向后迭代比向上迭代慢呢。有时需要从头开始迭代。我了解到,当向后迭代数组时,一些引擎会将底层数据结构切换为哈希,这会更糟糕。因此,我建议不要使用这种微优化方法。如果没有适当的分析和测试,就不要进行优化。首先,我想你指的是arr[x]。第二,在今天的硬件上,我不相信这会更快(甚至更慢),但为什么引擎要使向后迭代比向上迭代慢呢。有时需要从头开始迭代。