ループ展開使ってますか? 8の倍数でバルクループさせると、普通に回すより効率いいですよ?
定番のループ展開も
- 先にまとめてやる
- 後からまとめてやる
の2つの方法で記述する事ができます。
// loop unwinding type1 - 先にやる
function loop1(n) {
var now = Date.now();
var rv = [],
i = 0, iz = n & 0xfffffff8;
for (; i < iz; i += 8) {
// rv.push(i, i+1, i+2, i+3, i+4, i+5, i+6, i+7);
}
for (; i < n; ++i) {
// rv.push(i);
}
console.log(Date.now() - now);
}
// loop unwinding type2 - 後でやる
function loop2(n) {
var now = Date.now();
var rv = [],
i = -1,
iz = n,
remain = iz % 8;
while (remain--) {
// rv.push(++i);
}
remain = iz >>> 3;
while (remain--) {
// rv.push(i+1, i+2, i+3, i+4, i+5, i+6, i+7, i+8);
i += 8;
}
console.log(Date.now() - now);
}
速度的な差はほぼ無いので、変数が少ない loop1 のほうがお手軽ですね。