2017-10-02 1 views
-2

これは計り知れないかもしれませんが、私は依然として尋ねます。好奇心から。このコードでループを壊したときに `else if`よりも単純な` if`が高速ですか?

for (var i = 0; i < 10; i++) { 
 
    if (i > 5) { 
 
    break; 
 
    } 
 
    
 
    console.log("Do some stuff:", i); 
 
}

私は、6回の反復のためのループを実行し、7日にそれを破ります。このコードで

for (var i = 0; i < 10; i++) { 
 
    if (i > 5) { 
 
    break; 
 
    } else { 
 
    console.log("Do some stuff:", i); 
 
    } 
 
}

私はかなり同じループが壊れている前に、それを破るifelse内部にある実行されるコードを除いてください。

明らかに、結果は同じです。しかし、これらの2つのコードは、下位レベルで別々に処理されていますか?そのうちの1つはわずかに高速ですか? 外見以外に違いはありますか?

+0

これは実際にターゲットとするVMによって異なりますが、ここでは両方の例で同じ命令を1つのVMでは使用できますが、別のVMでは使用できません。また、一般的なシナリオの具体的な答えはありませんが、小さなコンテキスト変更によってコンパイラがコードを完全に変更する可能性があります。 – MinusFour

答えて

0

構文にはパフォーマンス特性がありません。構文の振る舞いを支配する仕様のアルゴリズムは、性能特性を暗示していることを示唆しているかもしれませんが、必ずしもそうではありません。特に現代の最適化コンパイラの場合は

は、あなたのコードが完全にとにかく書き換えられ、そうでもそれ のように見えるいくつかのケースでは一つのことは、他よりも実際に速くまたは遅くする必要があり、それが実際に判明しないことがありさあ。

特にマイクロ最適化の場合には、ベンチマークが決定を下す方法であり、その場合でも、実世界のコードでは結果が一粒の塩で取り込まれる必要があります。ベンチマークで観察した結果を反映しています。これは、前述のコードの再作成の一部、またはベンチマークテスト自体の欠陥の可能性もあります。

関連する問題