loop unwinding - ループ展開(先におまとめ, 後からおまとめ)
ループ展開使ってますか? 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 のほうがお手軽ですね。