[翻訳者から:この翻訳は、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) {
}
}
«» , , . , ( computer science
«» ),
function func(a, b) {
var x;
var i = 300;
while (i--) {
x = a + b;
}
}
, , , , .
function sum() {
var a = [1, 2, 3, 4, 5];
var sum = 0.0;
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);
Y = 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
:
UPD: , . .
Detailed Results |
Average (ms) |
IE8 |
3746 |
Firefox 3.6.12 |
753 |
Safari 5.0.2 |
328 |
Firefox 4.0 Pre-Release Beta7 |
277 |
Chrome 7.0 |
262 |
Opera 10.63 |
246 |
Opera 11 Alpha |
242 |
Chrome 8.0 Beta |
233 |
IE9 Platform Preview #7 |
216 |