ホームページ  >  記事  >  ウェブフロントエンド  >  より良い jQuery コードを書くためのヒント

より良い jQuery コードを書くためのヒント

伊谢尔伦
伊谢尔伦オリジナル
2016-11-22 11:49:48936ブラウズ

まず第一に、jQuery は JavaScript であることを覚えておいてください。これは、同じコーディング規約、スタイルガイド、ベストプラクティスを採用する必要があることを意味します。

まず、JavaScript の初心者の方は、「JavaScript 初心者のためのベスト プラクティス」を読むことをお勧めします。これは、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 セレクターは一意である必要があるため、追加のセレクターを追加する必要はありません。

// 糟糕
$('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 と同等のネイティブ コードを使用することを強くお勧めします。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:JavaScript DOM次の記事:JavaScript DOM