TwitterのTLみてたら、[twitter:@ginpei_jp]さんが、JSに関する興味深いエントリを書いていたのを見つけた。
少数値を整数値に直すのに、ビット演算を用いることはJS界では有名なことで、個人的には不思議な挙動ではあるけども俺も多用している。
ただ、俺はOR( | )ではなくSHIFT ( << )を使っており、この2つに速度的な差があるのか、というのが気になった。
というわけで、せっかくなので調べてみた。
jsdo.itという兵器
自前でコード起こして、サイトにアップしてーとかやってるのが手間だったので、jsdo.itのちからを借りることにした。
自分の環境でテストした感想は、該当ページのREADMEにまとめたが、あまりに実行環境によって結果差が大きい。
Windows7ではことごとくOR演算が早く、MacOSX Lionでは逆にOR演算が少し遅い。
しかし、1千万回forループしてこの時間ということは、純粋にビット演算の時間だけみたらカウントのしようがないくらい微々たるものなので、[twitter:@ginpei_jp]さんの言うとおり、大差ない、という結論でいいんじゃないだろうか。
データ
IE9
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
106.157 |
1.006 |
Right Shift ( >> 0 ) |
106.864 |
1.012 |
OR ( ¦ 0 ) |
105.513 |
1.000 |
Firefox
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
24.165 |
1.001 |
Right Shift ( >> 0 ) |
24.154 |
1.001 |
OR ( ¦ 0 ) |
24.127 |
1.000 |
Chrome
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
29.677 |
1.017 |
Right Shift ( >> 0 ) |
29.589 |
1.014 |
OR ( ¦ 0 ) |
29.172 |
1.000 |
Opera
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
221.647 |
1.024 |
Right Shift ( >> 0 ) |
222.954 |
1.030 |
OR ( ¦ 0 ) |
216.333 |
1.000 |
Safari
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
? |
? |
Right Shift ( >> 0 ) |
? |
? |
OR ( ¦ 0 ) |
? |
? |
Firefox
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
34.555 |
1.000 |
Right Shift ( >> 0 ) |
40.397 |
1.169 |
OR ( ¦ 0 ) |
34.554 |
1.000 |
Chrome
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
30.28 |
1.000 |
Right Shift ( >> 0 ) |
30.252 |
1.000 |
OR ( ¦ 0 ) |
33.632 |
1.111 |
Opera
ビット演算 |
所要時間(msec) |
最速を1とした時の比 |
Left Shift ( << 0 ) |
? |
? |
Right Shift ( >> 0 ) |
? |
? |
OR ( ¦ 0 ) |
? |
? |