8

私はたくさん見ます:

var something = (is_something_true()) ? 3 : 4;

javascriptで。これはより速いですか

var something;
if (is_something_true()) {
    something = 3;
} else {
    something = 4;
}

それとも、便宜上簡潔に書かれていますか?

4

4 に答える 4

6

これを楽しんでください-違いが統計的に有効である場合、結果(trueまたはfalse)も重要です-明らかにこれはブラウザのパフォーマンスに影響を与えるマシン上の他のものです:

ここにリンクがあります

異なる結果!

2つの間に根本的な違いがあります。三元ステートメントは式であり、制御の流れではありません。誰かがそれを標準ではなく三元式として書く場合がある場合、/より/ else、両方が同じように機能する場合、(私の意見では)正当な理由なしにコードを読みにくくします。

速度に関しては違いはありません。本当に悪いjavascript実装を使用していない限り。両方のステートメントの最も遅い部分は分岐です。

于 2012-07-06T20:10:37.623 に答える
4

読みやすさのために最初に書き、小さなマイクロ最適化を150秒で行う必要があります。多くの場合、最初の形式の方が読みやすく、パフォーマンスに大きな違いはないでしょう。

(同意せず、2番目の形式の方が読みやすいと思ったとしても、相対的なパフォーマンスの違いについて尋ねるのは間違った質問です。)

于 2012-07-06T20:13:50.857 に答える
3

これが統計です:ここに画像の説明を入力してください

?:複数のテストと観察の結果、ほとんどの場合、三項演算子( )は。よりも遅いと結論付けることができますif/else

于 2012-07-06T20:17:42.027 に答える
1

はい、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つにコメントを付けてコードを実行し、ループを多数の反復(コード数百万回を超える反復)で実行します。

ヒント:平均を取得するには、ループを複数回実行してみてください。

于 2017-10-24T18:13:18.863 に答える