ifとスコープの速さ
ifとor
書き方として気になったんですが、
if(!b) b = 2;
a = b + c;
と
a = (b || (b = 2)) + c;
と、if文を書くかどうかで速度に違いが出るのかなー、と思って計ってみました。
// case 1 var a, b, c = 1; while(i--){ if(!b) b = 2; a = b + c; b = null; } // case 2 var a, b, c = 1; while(i--){ a = (b || (b = 2)) + c; b = null; }
fx3.5 | ie8 | opera10 | chrome3.0 | |
case 1 | 0.00001313 | 0.0002628 | 0.0001864 | 0.00002484 |
case 2 | 0.00001188 | 0.0002962 | 0.0002122 | 0.00003132 |
(単位はms)
どれも体感で差が出るような違いはありませんが、Firefoxだけifの方が遅いみたいですね。
スコープ
Firefoxで計ってて思ったんですが、変数のスコープも速度に影響あるんだなあ、と思ってこっちも計ってみました。
// case 3 var a, b, c = 1; while(n--) (function(){ a = (b || (b = 2)) + c; b = null; })(); // case 4 while(n--) (function(){ var a, b, c = 1; a = (b || (b = 2)) + c; b = null; })();
fx3.5 | ie8 | opera10 | chrome |
0.003435 | 0.003586 | 0.001582 | 0.0004042 |
0.0001866 | 0.002802 | 0.001396 | 0.0003785 |
(単位はms)
どのブラウザでも変数定義よりスコープ辿る方がコスト高いようです。特にFirefoxだと大きな差が。俺のFirefoxどっか悪いんだろうか。
まとめ
- ifでもorでも速度的に大差なさそうだし好きに書くのがいいです
- 変数定義のコストを考えるよりスコープチェーンを気にした方がいいです