2012年7月1日日曜日

JavaScript のビット演算は遅くない?

JavaScript の「ビット演算」は遅くていいことがないと、JavaScript: The Good Parts では悪者扱いされています。 遅くなる理由として、ビット演算を行う際に倍精度浮動小数点型を整数に変換し、ビット演算後にまた倍精度浮動小数点型に戻す処理を行うため、とある。

では、この処理でどのくらい遅くなるのだろう?
Chrome で次のようなコードで試してみた。

// 足し算 +
var flag,
    v = [1, 2, 4, 8, 16, 32, 64, 128];

for (var i = 0; i < 9000000; i++) {
    flag = v[0] + v[1] + v[2] + v[3] + v[4] + v[5] + v[6] + v[7];
}


// ビット演算は '+' を '|' に置き換え
    flag = v[0] | v[1] | v[2] | v[3] | v[4] | v[5] | v[6] | v[7];

足し算とビット演算をそれぞれ 9000 万回実行して時間を計測してみると、普通の足し算では平均して 151 ms で ビット演算では 122 ms。
 ・・・えっ、ビット演算の方が速いではないか!

ビット演算は言われているほど遅くなく、むしろ速いようです。

僕の中では、ビット演算子は "good parts" に昇格です。


JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス


リンク:JavaScript のビット演算は遅い?