jQuery のパフォーマンス最適化を改善するためのヒント

PHPz
リリース: 2018-09-29 14:03:38
オリジナル
1043 人が閲覧しました

この記事では主に 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 ビデオ チュートリアル をご覧ください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート