この記事では主に jQuery のパフォーマンス最適化を改善するための詳細なテクニックを紹介します。必要な方は参考にしてください。
jQuery のパフォーマンスを向上させるための次の最適化のヒントを共有します:
キャッシュ変数
DOM トラバーサルはコストがかかるため、再利用するようにしてください。キャッシング。
// 糟糕 h = $('#element').height(); $('#element').css('height',h-20); // 建议 $element = $('#element'); h = $element.height(); $element.css('height',h-20);
グローバル変数を避ける
JavaScript と同様、jQuery では一般に、変数が関数スコープ内にあることを確認することが最善です。
// 糟糕 $element = $('#element'); h = $element.height(); $element.css('height',h-20); // 建议 var $element = $('#element'); var h = $element.height(); $element.css('height',h-20);
ハンガリー語の命名法を使用します
jQuery オブジェクトを簡単に識別するには、変数の前に $ プレフィックスを追加します。
// 糟糕 var first = $('#first'); var second = $('#second'); var value = $first.val(); // 建议 - 在jQuery对象前加$前缀 var $first = $('#first'); var $second = $('#second'), var value = $first.val();
Var チェーンを使用する (単一 Var モード)
複数の var ステートメントを 1 つのステートメントに結合する 割り当てられていない変数を最後に置くことをお勧めします。
var $first = $('#first'), $second = $('#second'), value = $first.val(), k = 3, cookiestring = 'SOMECOOKIESPLEASE', i, j, myArray = {};
「On」を使用してください
jQuery の新しいバージョンでは、短い on("click") が click() のような関数の代わりに使用されます。 。以前のバージョンでは、on() は binding() でした。 jQuery バージョン 1.7 以降、イベント ハンドラーをアタッチするには on() が推奨される方法です。ただし、一貫性を保つために、単に on() メソッドをまとめて使用することもできます。
// 糟糕 $first.click(function(){ $first.css('border','1px solid red'); $first.css('color','blue'); }); $first.hover(function(){ $first.css('border','1px solid red'); }) // 建议 $first.on('click',function(){ $first.css('border','1px solid red'); $first.css('color','blue'); }) $first.on('hover',function(){ $first.css('border','1px solid red'); })
JavaScript の効率化
一般に、可能な限り関数を組み合わせることが最善です。
// 糟糕 $first.click(function(){ $first.css('border','1px solid red'); $first.css('color','blue'); }); // 建议 $first.on('click',function(){ $first.css({ 'border':'1px solid red', 'color':'blue' }); });
連鎖操作
jQuery でメソッドの連鎖操作を実装するのは非常に簡単です。以下を活用してください。
// 糟糕 $second.html(value); $second.on('click',function(){ alert('hello everybody'); }); $second.fadeIn('slow'); $second.animate({height:'120px'},500); // 建议 $second.html(value); $second.on('click',function(){ alert('hello everybody'); }).fadeIn('slow').animate({height:'120px'},500);
コードの可読性を維持する
コードを合理化しチェーンを使用すると、コードが読みにくくなる可能性があります。ピンチや改行を追加すると、驚くべき効果が得られます。
// 糟糕 $second.html(value); $second.on('click',function(){ alert('hello everybody'); }).fadeIn('slow').animate({height:'120px'},500); // 建议 $second.html(value); $second .on('click',function(){ alert('hello everybody');}) .fadeIn('slow') .animate({height:'120px'},500);
短絡評価の選択
短絡評価は、&& (論理 AND) または || を使用して左から右に評価される式です。 (論理OR)演算子。
// 糟糕 function initVar($myVar) { if(!$myVar) { $myVar = $('#selector'); } } // 建议 function initVar($myVar) { $myVar = $myVar || $('#selector'); }
ショートカットの選択
コードを合理化する 1 つの方法は、コーディング ショートカットを利用することです。
// 糟糕 if(collection.length > 0){..} // 建议 if(collection.length){..}
負荷の高い操作中の要素の分離
DOM 要素に対して多くの操作 (複数の属性または CSS スタイルを連続的に設定する) を実行する予定がある場合は、最初にそれらを分離することをお勧めします。その後、要素が追加されます。
// 糟糕 var $container = $("#container"), $containerLi = $("#container li"), $element = null; $element = $containerLi.first(); //... 许多复杂的操作 // better var $container = $("#container"), $containerLi = $container.find("li"), $element = null; $element = $containerLi.first().detach(); //... 许多复杂的操作 $container.append($element);
ヒントを知ってください
jQuery でメソッドを使用する経験が不足している可能性があります。必ずドキュメントを確認してください。より優れた、または高速なメソッドがある可能性があります。それを使用する方法。
// 糟糕 $('#id').data(key,value); // 建议 (高效) $.data('#id',key,value);
サブクエリを使用して親要素をキャッシュする
前述したように、DOM トラバーサルは負荷の高い操作です。一般的なアプローチは、親要素をキャッシュし、子要素を選択するときにこれらのキャッシュされた要素を再利用することです。
// 糟糕 var $container = $('#container'), $containerLi = $('#container li'), $containerLiSpan = $('#container li span'); // 建议 (高效) var $container = $('#container '), $containerLi = $container.find('li'), $containerLiSpan= $containerLi.find('span');
ユニバーサル セレクターを避ける
子孫セレクターの中にユニバーサル セレクターを置くと、パフォーマンスが低下します。
// 糟糕 $('.container > *'); // 建议 $('.container').children();
暗黙的なユニバーサル セレクターを避ける
ユニバーサル セレクターは暗黙的であり、検出が難しい場合があります。
// 糟糕 $('.someclass :radio'); // 建议 $('.someclass input:radio');
セレクターの最適化
たとえば、Id セレクターは一意である必要があるため、セレクターを追加する必要はありません。
// 糟糕 $('p#myid'); $('p#footer a.myLink'); // 建议 $('#myid'); $('#footer .myLink');
複数の ID セレクターを避ける ここで、ID セレクターは一意である必要があることが強調されています。追加のセレクターを追加する必要はなく、複数の子孫 ID セレクターも必要ありません。
// 糟糕 $('#outer #inner'); // 建议 $('#inner');
最新バージョンを使用してください
通常、新しいバージョンの方が優れており、より軽量で効率的です。明らかに、サポートしたいコードの互換性を考慮する必要があります。たとえば、バージョン 2.0 は IE 6/7/8 をサポートしません。非推奨のメソッドを放棄する 新しいバージョンごとに非推奨のメソッドに注意を払い、これらのメソッドの使用を避けることが非常に重要です。
// 糟糕 $('#outer #inner'); // 建议 $('#inner');
CDN の使用
Google の CND を使用すると、ユーザーに最も近いキャッシュが選択され、迅速に応答することが保証されます。 (Google CNDを利用する場合はご自身でアドレスを検索してください。ここのアドレスは利用できません。jquery公式サイトが提供するCDNを推奨します。)
必要に応じて jQuery と JavaScript ネイティブ コードを組み合わせる
上で述べたように、jQuery は JavaScript です。つまり、jQuery で実行できることはすべてネイティブ コードでも実行できます。 。ネイティブ コード (またはバニラ) は、jQuery ほど読みにくく保守しにくい可能性があり、コードは長くなります。しかし、それはより効率的であることも意味します (通常、基礎となるコードに近づくほど可読性が低くなり、パフォーマンスが向上します。たとえば、アセンブリには当然より強力な人材が必要です)。ネイティブ コードよりも小さく、軽く、効率的なフレームワークは存在しないことに留意してください (注: テスト リンクはもう有効ではありません。テスト コードはオンラインで検索できます)。バニラと jQuery のパフォーマンスの違いを考慮すると、両方の長所を活かし、(可能であれば) jQuery と同等のネイティブ コードを使用することを強くお勧めします。
最後のアドバイス
最後に、jQuery のパフォーマンスの向上とその他の良い提案を目的として、この記事を記録します。このトピックをさらに深く掘り下げたい場合は、非常に楽しいことがわかります。 jQuery は必須ではなく、単なるオプションであることに注意してください。なぜそれを使いたいのか考えてみましょう。 DOM操作?アヤックス?ステンシル? CSSアニメーション?それともセレクターエンジン?おそらく、JavaScript マイクロフレームワークまたは jQuery のカスタマイズされたバージョンの方が良い選択でしょう。
上記は、jQuery のパフォーマンス最適化の改善に関するこの記事の詳細な紹介です。その他の関連チュートリアルについては、jQuery ビデオ チュートリアル をご覧ください。