IE9でJavascriptのデッドコードを取り除く

[翻訳者から:この翻訳は、IEチームのブログからのこの公式投稿の一部であり、最近の誤解を明らかにすることを目的としています: IE9-SunSpider JSでの不正行為? ]

新しいJavaScriptエンジンであるコード名Chakraの変更点の1つは、実際のサイトのパフォーマンスを向上させるためのデッドコードの破壊です。 昨日の午後、誰かが私たちの接続について質問を投稿しました- 「SunSpiderに含まれる正確な[数学-コードテスト]関数以外の、どのようなコードが分析に使用されますか」 。 多くの人がこの質問に興味を持っていたので、このブログ投稿はそれに答えるように設計されています。


つまり、実際のWebアプリケーションのパフォーマンスを改善するために、IE9 JavaScriptエンジンにはさまざまな変更が加えられています。 ietestdrive.com Webサイトでいくつかのサンプルアプリケーションを試してから、異なるブラウザで結果を比較できます。 JSエンジンの動作は「特別にねじれた」最適化ではなく、これはバグではありません。

チャクラでは、コンパイラの世界でよく知られているいくつかの最適化、特に「デッド」コードの除外を適用しました。 このタイプの最適化は、プログラムの状態を変更しないコードを探してプログラムコードをスキャンし、このコードを削除します。 これには、プログラムメモリのサイズの削減とプログラムの速度の向上という2つの利点が同時にあります。

条件は常にfalseであり、jsエンジンはそれを非常によく削除する可能性があるため、削除の適切な候補であるJavascriptコードの非常に単純な例を次に示します。


function func() {
    var x = 1;
    var y = 3;
    var w = x + y;

    if (w != 4) {
        // dead code 
    }
}


«» , , . , ( computer science «» ),


function func(a, b) {
    var x;
    var i = 300;
    while (i--) {
        x = a + b; // dead store
    }
}


, , , , .


function sum() {
    var a = [1, 2, 3, 4, 5];
    var sum = 0.0;
    
    // dead loop elimination
    for (var i = 0; i < 5; i++) {
        sum += a[i];
    }
}


«» , , , . .

, math-cordic Webkit SunSpider suite? .


function cordicsincos() { 
     var X;  
     var Y;  
     var TargetAngle; 
     var CurrAngle;  
     var Step;   
     X = FIXED(AG_CONST);         /* AG_CONST * cos(0) */ 
     Y = 0;                       /* AG_CONST * sin(0) */ 
   
    TargetAngle = FIXED(28.027);  
    CurrAngle = 0;  
    for (Step = 0; Step < 12; Step++) { 
        var NewX; 
            if (TargetAngle > CurrAngle) { 
               NewX = X - (Y >> Step);  
               Y = (X >> Step) + Y; 
               X = NewX; 
               CurrAngle += Angles[Step];  
            } else { 
               NewX = X + (Y >> Step); 
               Y = -(X >> Step) + Y; 
               X = NewX; 
               CurrAngle -= Angles[Step]; 
            } 
    } 
} 


, . , .

, , , .

, . Sunspider . , JavaScript.

JavaScript, «» . , - , -. Chakra «» . , Connect , . «» .

«» , Chakra . JavaScript .

— Dean Hachamovitch

: IE9 ietestdrive.com
:image
UPD: , . .
Detailed ResultsAverage (ms)
IE83746
Firefox 3.6.12753
Safari 5.0.2328
Firefox 4.0 Pre-Release Beta7277
Chrome 7.0262
Opera 10.63246
Opera 11 Alpha242
Chrome 8.0 Beta233
IE9 Platform Preview #7216

Source: https://habr.com/ru/post/J108355/


All Articles