Мне нужно скопировать 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
Гумбо, ты прав. Это немного быстрее.Если вы напишете свой комментарий как ответ, и нет лучшего решения, я дам его вам – Peter
Я знаю, что это очень поздно, но было любопытно. Почему не просто 'var dst = src.concat()'? Я думаю, что это, вероятно, самый быстрый способ клонирования массива. Однако это не глубокая копия. Для глубокого копирования цикл - единственный способ пойти. –