jQueryコードの効率を向上させる書き方テクニックのまとめ

巴扎黑
リリース: 2017-07-18 18:47:54
オリジナル
1227 人が閲覧しました

キャッシュ変数

DOM トラバーサルはコストがかかるため、再利用される要素をキャッシュするようにしてください。

// 糟糕h = $('#element').height();
$('#element').css('height',h-20);// 建议$element = $('#element');
h = $element.height();
$element.css('height',h-20);
ログイン後にコピー

グローバル変数を避ける

jQuery は一般に JavaScript と同じです。変数が関数スコープ内にあることを確認するのが最善です。

// 糟糕$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();//... 许多复杂的操作// bettervar$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 セレクターは一意である必要があるため、セレクターを追加する必要はありません。

// 糟糕$('div#myid');
$('div#footer a.myLink');// 建议$('#myid');
$('#footer .myLink');
ログイン後にコピー

複数の ID セレクターを避ける

ID セレクターは一意である必要があり、追加のセレクターを追加する必要はなく、複数の子孫 ID セレクターは必要ないことを強調したいと思います。

// 糟糕$('#outer #inner');// 建议$('#inner');
ログイン後にコピー

最新バージョンを使用してください

通常、新しいバージョンの方が優れており、より軽量でより効率的です。明らかに、サポートしたいコードの互換性を考慮する必要があります。たとえば、バージョン 2.0 は IE 6/7/8 をサポートしていません。

非推奨のメソッドを放棄する

新しいバージョンごとに非推奨のメソッドに注意を払い、これらのメソッドの使用を避けることが非常に重要です。

// 糟糕 - live 已经废弃$('#stuff').live('click', function() {
  console.log('hooray');
});// 建议$('#stuff').on('click', function() {
  console.log('hooray');
});// 注:此处可能不当,应为live能实现实时绑定,delegate或许更合适
ログイン後にコピー

CDN を使用すると

Google の CND により、ユーザーに最も近いキャッシュが選択され、迅速に応答することが保証されます。 (Google CNDを使用する場合はご自身でアドレスを検索してください。ここのアドレスは使用できません。jquery公式サイトが提供するCDNを推奨します。)

必要に応じて jQuery と JavaScript のネイティブ コードを組み合わせます

上で述べたように、jQuery は JavaScript です。つまり、jQuery で実行できることはすべてネイティブ コードでも実行できます。ネイティブ コード (またはバニラ) は、jQuery ほど読みにくく保守しにくい可能性があり、コードは長くなります。しかし、それはより効率的であることも意味します (通常、基礎となるコードに近づくほど可読性が低くなり、パフォーマンスが向上します。たとえば、アセンブリには当然より強力な人材が必要です)。ネイティブ コードよりも小さく、軽く、効率的なフレームワークは存在しないことに留意してください (注: テスト リンクは無効になりました。テスト コードはオンラインで検索できます)。

バニラと jQuery のパフォーマンスの違いを考慮して、両方の長所を吸収し、(可能であれば) jQuery と同等のネイティブ コードを使用することを強くお勧めします。

jQuery の記述原則:

1. jQuery を使いすぎないでください

1. jQuery がどれほど高速であっても、ネイティブの JavaScript メソッドと比較することはできず、作成された jQuery オブジェクトには膨大な量の情報が含まれます。したがって、使用できるネイティブ メソッドがある場合は、jQuery の使用を避けるようにしてください。

2. 多くの jQuery メソッドには 2 つのバージョンがあり、1 つは jQuery オブジェクト用で、もう 1 つは jQuery 関数用です。後者は jQuery オブジェクトを介して動作しないため、オーバーヘッドが比較的少なく、高速です。


以上がjQueryコードの効率を向上させる書き方テクニックのまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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