0

ほとんどの場合 true と評価されるデータセットの変数がある場合、それを「if」句または「else」句に入れる必要があります。一方は他方より速いですか?機械語に変換されているため、JavaScript エンジンやオペレーティング システムなどに依存していると確信しています。

このような:

var usualyTrue;
// some more code here...
if(usualTrue)
    //do something
else
    //do something else

またはこのように:

var usualyTrue;
// some more code here...
if(!usualTrue)
    //do something
else
    //do something else
4

4 に答える 4

2

一般的には問題にならないので、最も読みやすいものにする必要があります。

3つの理由。

  1. コンパイラは、ほとんどの場合、これらの条件のどれが当てはまるかをあまり気にしないほど十分にスマートです (数百万/数十億の比較を行っていない限り、ブール値は最も安価な評価です)
  2. (ISA レベルでの) 分岐は、これが問題にならないことを意味します。このような単純な比較は、基本的にパイプライン処理によって同時に評価されます。
  3. このような最適化に費やす時間は、「自分が行う AJAX 呼び出しの数を減らすにはどうすればよいか」を考えるのに費やすよりもはるかに良いでしょう。または「ある時点で不必要に DOM をループしていませんか?」

生成されるものに興味がある場合は、 Rhinoなどを使用して自分で JS をコンパイルできます。

于 2013-03-20T00:45:47.433 に答える
1

どちらが速いかについて心配する必要はありません。違いがあれば、わずかに高速になるためです。時期尚早の最適化の罠に陥っているだけです。

現在のブラウザー (および JavaScript 以外の他の言語のコンパイラー/インタープリター) には、ブール論理のあらゆる種類の最適化があるため、それについて心配する必要はありません。

于 2013-03-20T00:44:39.170 に答える
0

重大なパフォーマンスの違いは実際にはありませんが、 if(usualTrue) をチェックする方が理にかなっているようです。何が通常真であるかを知っていれば、頻繁に偽の式を不必要に評価することを避けることができます。

于 2013-03-20T00:42:47.913 に答える
0

読みやすいように書く

どちらの方法でもパフォーマンスの違いはありません。重要なのは、読みやすさのために書くことです。つまり、意味のある変数名と適切なロジックを使用することです。

例えば

var errorFound;
// some more code here...
if(errorFound) {
    //do something
} else {
    //do something else
}

ただし、二重否定は避けてください。

var noErrorFound;
// some more code here...
if(!noErrorFound) {
    //do something
} else {
    //do something else
}

それが読みづらくなるので、探している他のものを入力するのが!!noErrorFound難しくなり、デバッグが難しくなります:)。

于 2013-03-20T00:51:04.420 に答える