【发布时间】:2009-09-19 16:55:27
【问题描述】:
我需要将一个数组的一部分FAST复制到另一个数组中,替换它的旧值。
- 无需范围检查。
- 要复制的项目数:16384
- 数组只包含整数
基准代码: http://codebase.es/test/copytest.htm
这是我的方法:
var i = 0x4000>>5; // loops count
var j = 0x4000; // write start index
var k = 0x8000; // read start index
while (i--) { // loop unrolling
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
//8
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
//16
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
//24
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
dst[j++]=src[k++]; dst[j++]=src[k++];
//32
}
这可以更快地完成吗?
【问题讨论】:
-
使用 pre-decremet/pre-increment 而不是 post-decrement/post-increment 可能会带来轻微的性能提升。
-
秋葵,你是对的。它有点快。如果您将评论写为答案并且没有最佳解决方案,我会给您
-
我知道这已经很晚了,但很好奇。为什么不只是
var dst = src.concat()?我认为这可能是克隆数组的最快方法。不过,这不是深拷贝。对于深拷贝循环是唯一的方法。
标签: javascript arrays copy performance