JavaScript の先頭に次のコードを追加します
>/*@ cc_on _d=document;eval('var document=_d')@*/
このようなコード行を追加すると、IE のドキュメント アクセス速度が少なくとも 5 倍向上します。
以下は追加前です 追加したテストとコードを比較します
//
var date = new Date
for (var i = 0; i alert(new Date - date); / 643
/ *@cc_on _d=document;eval('var document=_d' )@*/
//
date = new Date
for (var i = 0; i alert(new Date - date) ; // 145
速度が大幅に向上しました。
説明:
まず、IE でドキュメントを直接呼び出すと、ウィンドウ オブジェクトの内部関数が実行され、これは比較的非効率です。これによると、次の処理により速度が向上します。
var doc = document;
document; // 上記 (document) よりも高速です。
上に書いたようにそのまま使うこともできますが、前に使っていたドキュメントを差し替えるのが少し面倒です。したがって、次を見てください:
var doc = document;
var document = doc;
JavaScript を知っている人は知っているはずです。そのJavaScript 変数は最初に生成されるので、ここのドキュメントは未定義になります。
関係ありません、改善を続けてください~
var doc = document;
eval('var document = doc');
eval の機能は、この場合、後続のドキュメントは正常に使用できます。
最後に、次のように IE でのみ有効な条件を追加します~
コードをコピー
eval('var document = doc');
@*/
描画ドキュメント以外のグローバル変数も上記の方法を使用して処理を高速化できます。
コードをコピー
var code = [];
for (var i = 0 l = props.length;ivar prop = props[i];
window[ '_' prop]=window[prop];
code.push(prop '=_' prop)
}
return 'var ' code.join(','); >}) ('document self topparentalert setIntervalclearInterval
setTimeoutclearTimeout'.split(' ')));
@*/
以下はフランキーの返信です:
まず、IE でドキュメントを直接呼び出すと、ウィンドウ オブジェクトの内部関数が実行され、これは比較的非効率です。この点によれば、次の処理により速度が向上する可能性があります。
この記述は間違っています。
テスト前とテスト後の間に違いがある理由は、主な違いは次のとおりです。 あなたのコードはグローバル実行環境にあります。そのため、IE では、このオブジェクトは、キー「ドキュメント」を持つグローバル オブジェクトにアクセスします。グローバルにない場合は、ウィンドウ内で再度検索すると速度が低下します。
同じグローバル オブジェクトではこの問題は発生しません。 Math は Global にあります。
最適化のための 1 つの提案は、
var win = window, doc = document,
スコープの各レベル内です。このメンバーが 2 回以上使用される場合、意味があります。
また、グローバル スコープ内で ie 条件付きコメントを 1 回しか使用しない場合、まず、ie 以外のユーザーはその利点を享受できません。もちろん、IE 以外のユーザーには、グローバル->ウィンドウの責任の連鎖がもう 1 つありません。ただし、Opera などの新しいバージョンでは、最適化の中心となるのは、スコープの連鎖を短縮することです。 Chrome Safari はスコープ チェーン検索を最適化しています。スコープ チェーンを短くすることは古いブラウザにプラスの効果をもたらし、最適化されたブラウザにはそれほどマイナスの影響を及ぼさないと考えています。