##参考
以前、jQueryのセレクタに関してまとめたので参考までに
http://qiita.com/Rock22/items/66b7be754034412b8851
##セレクタの速さを意識する
1.idセレクタ
$('#id'); // 裏でgetElementById()が処理をしている
2.タグセレクタ
$('div'); // 裏でgetElementsByTagName()が処理をしている
3.classセレクタ
$('.class'); // 裏でgetElementsByClassName()が処理をしている
id
属性は原則、1ページに一つしかないため、id
セレクタを使用した場合
指定の要素を取得できた段階で以降のチェックを行わないため、負荷が軽く済み
class
属性は1ページに複数存在する可能性があるため、最後までチェックを行います。
ですのでid
セレクタと比べ処理時間が長くなります。
ページに一つしかないものはclass
ではなくid
属性を付与した方が高速化という意味では妥当だと思われます。
もし取得したい要素にid
が付いている場合はid
を指定し、付いていなくても親要素や、そのまた親の要素からid
で辿るような記法をするのが良いでしょう。
上記のclass
をそのように取得する場合、下記のようになります。
$('#id div.class');
##無駄なObjectを生成しない
jQueryオブジェクトの作成には負荷がかかるので下記のような実装を用いる
悪い例
for (i = 0; i < 1000; i++) {
$("#id div.class").append(' ' + i);
}
良い例
var test = $("#id div.class");
for (i = 0; i < 1000; i++) {
test.append(' ' + i);
}
##メソッドチェーンを活用する
jQueryのメソッドは、jQueryオブジェクトを受け取ってjQueryオブジェクトを返すようになっているものが多いので、
何度も同じオブジェクトへの参照を回避するため、一つの処理の後にまた別の処理をつなげて書く「メソッドチェーン」を活用すると良い
悪い例
$('.class').addClass('box');
$('.class').css('background-color', 'black');
$('.class').css('color', 'white');
良い例
$('.class').addClass('box').css('background-color', 'black').css('color', 'white');
##終わりに
今まで、とりあえず想定のDOM操作が行えていればOKという感じで実装していたので、
パフォーマンスという点に関してはあまり深く考えていませんでしたが、業務で無駄なコードを指摘されることが多かったので、今回調べてみました。
他にもパフォーマンス改善のためできるテクニックは沢山あるようなので、随時更新していきたいと思っています。