JavaScript条件文の性能問題


条件文
サイクルと同じように、条件文もJavaScriptの条件文を変えます.二つの種類に分けられます.
  • if-else
  • switch
  • if-elseは私たちが一番よく使っていますが、if-else文とswitch文は多くの場合お互いに置き換えられます.たとえば、下記のコードは等価です.
    if(foo){
        ...
    }else{
        ...
    }
    switch(foo){
        case true:
            ...
        default:
            ...
    }
    条件が少ない時はif-elseを使う傾向がありますが、条件が多い方が分かりやすいようです.
    if(foo === 1){
        ...
    }else if(foo === 2){
        ...
    }else if(foo === 3){
        ...
    }else if(foo === 4){
        ...
    }else{
        ...
    }
    switch(foo){
        case 1:
            ...
        case 2:
            ...
        case 3:
            ...
        case 4:
            ...
        default:
            ...
    }
    しかし、この二つの条件文のどちらの性能がいいですか?条件が非常に大きいなら、switch文のほうがもっと速くて正確です.条件が高くなると、if-elseの性能負担が高くなります.switch文は強制的なタイプ転換が発生しないので、つまり全クラスのオペレータを使って比較します.このようにタイプ転換の損失がありません.
    ですから、条件の数が少ない時にはif-elseを使います.条件の数が多い時にはswitchを使って性能の観点から考えるのが合理的です.(if-elseは二つの離散値またはいくつかの異なる値を判断するのに適しています.switchは複数の離散値を判断するのに適しています.)
    私達はif-else文を使う時、確率によって大きく小さい順に並べばいいです.これはよく分かりますが、他の点を無視されやすいです.最適化とは、if-elseをできるだけネストしたif-else文です.これは私達の数学上の二分法と似ています.範囲を減らして実行時間を減らすことができます.
    if(foo >= 1 && foo < 3){
        //...
    }else if(foo >= 3 && foo < 5){
        //...
    }else if(foo >= 5 && foo < 7){
        //...
    }else{
        //...
    }
    こうなりました
    if(foo >= 1 && foo < 5){
        if(foo < 3){
            //...
        }else{
            //...
        }
    }else{
        if(foo < 7){
            //...
        }else{
            //...
        }
    }
    効率を上げることができます
    テーブルを検索
    いくつかの特殊な場合には、「ルックアップテーブル」を使用する方法は、超高性能であり、条件の数が多い場合には、
    function fn(a){
        switch(a){
            case 0:
                return 0;
            case 1:
                return 1;
            case 2:
                return 2;
            case 3:
                return 3;
            case 4:
                return 4;
            case 5:
                return 5;
            case 6:
                return 6;
            case 7:
                return 7;
        }
    }
    上の関数を再構成します.
    function fn(a){
        var retArr = [0,1,2,3,4,5,6,7];
        return retArr[a];
    }
    このように、単純であるだけでなく、可読性も良く、条件の数が多くなると、ルックアップテーブルは、付加的な性能オーバーヘッドをほとんど生成しないが、単一のキーと単一の値の間に論理マッピングがある場合には、より適している.
    3つの演算子
    条件語句と似ている3つの演算子がありますか?if-elseの3つの演算子に相当します.戻り値に注目するシーンにはどのような意味がありますか?下のコードを見てください.
    var foo;;
    if(flag){ foo = 1; }else{ foo = 2; }
    こう書き直したほうがいいです.
    var foo = flag ? 1 : 2;
    注目されるのはflag ? 1 : 2の戻り値がfoo変数に直接与えられる場合には、3つの演算子を使用するのに最適です.
    以上はJavaScriptの中の条件文の性能の問題です.使用条件がとても少ないですが、現代のブラウザJsエンジンはとても強いです.
    ==ホームゲート=