1. ループの外に追加
DOM に関係するものにはすべて代償が伴います。多数の要素を DOM に追加する場合は、複数回行うのではなく、すべてを一度に追加する必要があります。ループに要素を追加するときによくある問題が発生します。
一般的な手法は、文書の断片を使用することです。ループの各反復で、DOM 要素の代わりに要素をフラグメントに追加します。ループが終了したら、フラグメントを DOM 要素に追加します。
$.each( myArray, function( i, item ) {
var newListItem = document.createElement( "li" );
var itemText = document.createTextNode( item );
newListItem.appendChild( itemText );
frag.appendChild( newListItem );
});
$( "#ballers" )[ 0 ].appendChild( frag );
もう 1 つの簡単なトリックは、ループの反復ごとに文字列を継続的に構築することです。ループが終了したら、DOM 要素の HTML をこの文字列に設定します。
$.each( myArray, function( i, item ) {
myHtml = "
});
$( "#ballers" ).html( myHtml );
もちろん、他にも試すことができるテクニックがあります。 jsperf というサイトは、これらのプロパティをテストするための優れた方法を提供します。このサイトでは、各手法のベンチマークを実行し、クロスプラットフォームのパフォーマンス結果を視覚化できます。
2. ループ中のキャッシュ長
for ループでは、事前にキャッシュする必要がある配列の長さプロパティに毎回アクセスしないでください。
for ( var i = 0; i // 何かをします }
3. 操作する要素を切り離します
DOM の操作は遅いため、できるだけ調整を少なくして操作する必要があります。 jQuery は、この問題を解決するために、バージョン 1.4 で detach() と呼ばれるメソッドを導入しました。これにより、要素を操作するときに DOM から要素を切り離すことができます。
$table.detach();
// ... テーブルに大量の行を追加します
$parent.append( $table );
4. 存在しない要素に基づいて行動しない
空のセレクターで多くのコードを実行する予定がある場合、jQuery はヒントを提供しません。エラーが発生しなかったかのように実行を続けます。セレクターに含まれる要素の数を確認するのはあなた次第です。
// より良い:
var $mySelection = $( "#nouchthing" );
if ( $mySelection.length ) {
$mySelection.slideUp();
}
// ベスト: doOnce プラグインを追加します。
jQuery.fn.doOnce = function( func ) {
this.length && func.apply( this );
これを返します;
}
$( "li.cartitems" ).doOnce(function() {
// ajax にしてください。o/
});
このガイドは、セレクターに要素が含まれていない場合に多くのオーバーヘッドを必要とする jQuery UI ウィジェットに特に役立ちます。
5. セレクターを最適化する
多くのブラウザーが document.querySelectorAll() メソッドを実装し、jQuery がセレクターの負担をブラウザーに移すため、セレクターの最適化は以前ほど重要ではありません。ただし、留意すべきヒントがまだいくつかあります。
ID ベースのセレクター
セレクターを ID で開始することが常に最善です。
最初のセレクターがノイズの多いセレクター エンジンを経由せずに処理されるため、.find() メソッドを使用すると高速になります -- ID のみのセレクターはすでに document.getElementById() メソッドを使用しています ネイティブであるため処理が高速ですブラウザ。
特異性
セレクターの右側をできるだけ詳しく説明し、左側についてはその逆を行います。
セレクターの右端には tag.class の形式でセレクターを記述し、左側には tag または .class のみを使用するようにしてください。
特異性の過度の使用を避ける
「DOM」を使用すると、要素を検索するときにセレクター エンジンがそれほど多くの反復を行う必要がないため、常にセレクターのパフォーマンスが向上します。
ユニバーサルセレクターの使用を避ける
セレクターが明示的または暗黙的に未定義の範囲内で一致する場合、パフォーマンスに大きな影響を与えます。