Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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:为什么这个基准测试显示array.shift()在读取数组中的值时比array[i]快得多?_Javascript_Arrays_Shift - Fatal编程技术网

Javascript:为什么这个基准测试显示array.shift()在读取数组中的值时比array[i]快得多?

Javascript:为什么这个基准测试显示array.shift()在读取数组中的值时比array[i]快得多?,javascript,arrays,shift,Javascript,Arrays,Shift,一个简单的问题。我创建了基准测试(下面的链接),至少对我来说(运行chrome 18.0.1025),每次使用array.shift()从数组前端读取值似乎比使用while/for循环读取值并通过索引访问值要快得多 我确信这不可能是对的,因为shift()还有很多工作要做,但同时我也看不出有什么地方我会做错来解释这个极端的差异 谢谢你的阅读, James每次测试只设置一次数组,因此只有shift测试的第一次迭代有任何数据可以使用。下一次迭代的第一次迭代留下一个空数组,并立即终止 ,其中变异算法

一个简单的问题。我创建了基准测试(下面的链接),至少对我来说(运行chrome 18.0.1025),每次使用array.shift()从数组前端读取值似乎比使用while/for循环读取值并通过索引访问值要快得多

我确信这不可能是对的,因为shift()还有很多工作要做,但同时我也看不出有什么地方我会做错来解释这个极端的差异

谢谢你的阅读,
James

每次测试只设置一次数组,因此只有
shift
测试的第一次迭代有任何数据可以使用。下一次迭代的第一次迭代留下一个空数组,并立即终止


,其中变异算法处理数据的副本。
shift
算法在性能上可以预见地排在最后。

为了公平起见,您也需要为使用索引的用户复制数组。谢谢,这是我最初的怀疑。我的印象是,设置代码是在每次迭代之前运行的,而不是在每次测试之前:)我添加了一个版本的shift算法,它不使用
array.length
lookup。现在,在chrome(V39)中,shift对我来说是第一位的,请参阅“shift,no-length lookup”:看起来V8在这里对all
int
数组进行了优化。使用填充有对象的数组进行的类似测试使的再次成为前导:-)请参见: