我需要將FAST複製到另一個陣列的一部分,替換它的舊值。Javascript - 將陣列部分複製到另一個陣列的最快方法
- 不需要範圍檢查。
- 項目數複製: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
}
可以這樣做快?
輕微的性能增益是使用decremet預/預遞增,而不是遞減後/後遞增。 – Gumbo 2009-09-19 17:41:30
Gumbo,你說得對。它快一點。如果你寫你的評論作爲答案,並沒有最好的解決方案,我會給你 – Peter 2009-09-19 18:01:53
我知道這是很晚,但很好奇。爲什麼不只是'var dst = src.concat()'?我認爲這可能是克隆數組的最快方法。這不是深層複製。對於深度複製循環是唯一的方法。 – 2011-11-27 23:19:37