这是JS数组复制在没有循环展开的情况下最快的速度吗?
Is this as fast as JS array copy can get without loop unrolling?
这与这个问题有关。
我听说带有减量和大于test的while模式比任何其他循环模式都快。考虑到这一点,这是js中最快的数组复制吗?
function arrayCopy(src,sstart,dst,dstart,length) {
length += sstart;
dstart += length;
while(--length >= sstart) {
dst[--dstart] = src[length];
}
}
其他测试函数
function slowCopy(src,sstart,dst,dstart,length) {
for(var i = sstart; i < sstart+length;i+=1 ) {
dst[dstart++] = src[i];
}
}
function aCopy(src,sstart,dst,dstart,length) {
Array.prototype.splice.apply(dst,[dstart, length].concat(src.slice(sstart,sstart+length)));
}
测试结果 http://jsperf.com/fastest-js-arraycopy
arrayCopy -
2,899
±5.27%
fastest
slowCopy - WINNER
2,977
±4.86%
fastest
aCopy——
2,810
±4.61%
fastest
我想在jsPerf测试中添加更多下面建议的函数,但是它们都没有包含源开始偏移量、目标开始偏移量或副本长度。无论如何,我对这些结果感到有些惊讶,因为这些结果似乎与我所期望的相反
谁说你需要一个循环?
var myArrayCopy = JSON.parse(JSON.stringify(myArray));
该方法对数组进行深度克隆。下面是一个函数:
function arrayCopy(src,sstart,dst,dstart,length) {
dst = JSON.parse(JSON.stringify(src));
}
请记住其他变量(除了src
和dst
)只是为了维护您的原始代码结构,以防您已经对该函数进行了预先存在的调用。
慢速复制出人意料地成为赢家。
function slowCopy(src,sstart,dst,dstart,length) {
for(var i = sstart; i < sstart+length;i+=1 ) {
dst[dstart++] = src[i];
}
}
我认为这是最快的方法:
var original = [1, 2, 3];
var copy = original.slice(0);
相关文章:
- 如何在未直接触发的情况下停止事件
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不传递此信息的情况下查找被调用的元素
- 如何在不刷新页面的情况下更新显示框
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 在我的情况下,如何进行http请求
- 在不知道深度或父属性的情况下从对象中删除属性
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- ROR:如何在不重新加载浏览器的情况下从控制器获取参数
- 如何在不影响其他元素的情况下扩展DIV
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- 如何在不影响网站页面速度的情况下在我的网站上使用谷歌字体
- 在不改变循环速度的情况下更改更新速度
- 这是JS数组复制在没有循环展开的情况下最快的速度吗?
- 只考虑页面速度,在什么情况下CSS或JS大到可以外部化
- 如何在没有浏览器和工具(如yslow/firebug)的情况下使用javascript和cookie来测量页面速度