私はたくさん見ます:
var something = (is_something_true()) ? 3 : 4;
javascriptで。これはより速いですか
var something;
if (is_something_true()) {
something = 3;
} else {
something = 4;
}
それとも、便宜上簡潔に書かれていますか?
私はたくさん見ます:
var something = (is_something_true()) ? 3 : 4;
javascriptで。これはより速いですか
var something;
if (is_something_true()) {
something = 3;
} else {
something = 4;
}
それとも、便宜上簡潔に書かれていますか?
これを楽しんでください-違いが統計的に有効である場合、結果(trueまたはfalse)も重要です-明らかにこれはブラウザのパフォーマンスに影響を与えるマシン上の他のものです:
2つの間に根本的な違いがあります。三元ステートメントは式であり、制御の流れではありません。誰かがそれを標準ではなく三元式として書く場合がある場合、/より/ else、両方が同じように機能する場合、(私の意見では)正当な理由なしにコードを読みにくくします。
速度に関しては違いはありません。本当に悪いjavascript実装を使用していない限り。両方のステートメントの最も遅い部分は分岐です。
読みやすさのために最初に書き、小さなマイクロ最適化を150秒で行う必要があります。多くの場合、最初の形式の方が読みやすく、パフォーマンスに大きな違いはないでしょう。
(同意せず、2番目の形式の方が読みやすいと思ったとしても、相対的なパフォーマンスの違いについて尋ねるのは間違った質問です。)
これが統計です:
?:
複数のテストと観察の結果、ほとんどの場合、三項演算子( )は。よりも遅いと結論付けることができますif/else
。
はい、2つの間に無視できる違いがあります。
ただし、違いは非常に小さいので、どちらを使用してもかまいません(if / elseの方が好きです)。読みやすさを向上させるので、誰かがあなたのコードを調べている場合や、あなた自身が後を追っている場合に多くの時間を節約できます。 3ヶ月かそこらと言います。
違いを確認したい人は、次のコードを試してください。
// declarations
var num1 = 10, num2, i = 0, startTime, endTime, x, y;
// start timer
startTime = Math.floor((new Date()).getTime());
for(; i < 1e8; i++) {
// first part if /else
if(x == 10)
y = x;
else
y = 0;
// second part ternary
y = (x == 10) ? x : 0;
}
// end timer
endTime = Math.floor((new Date()).getTime() - startTime);
document.write("Time taken " + endTime + " ms");
注:パーツの1つにコメントを付けてコードを実行し、ループを多数の反復(コード数百万回を超える反復)で実行します。
ヒント:平均を取得するには、ループを複数回実行してみてください。