2011-07-05 1 views
6

セレクタの結果を複数回使用すると、結果がキャッシュされるはずです。例は次のようになります。

var $selected = $('.some-selected-element'); 

process($selected); 
doStuff($selected); 

しかし、それが複数回使用されている場合、キャッシュ$(this)に任意のパフォーマンス上の利点はありますか?

$('.some-selector').hover(function() { 
    if (!$(this).hasClass('some-other-class')) { 
     $(this).addClass('another-class'); 
    } 
    process($(this)); 
} 
+0

はい、あなたは関数を呼び出して結果を何度も返すべきです – xandercoded

答えて

8

はい、jQueryがセレクタを解釈しなくて済むため、パフォーマンスが向上します。

ここではセレクタの解釈と、バイパスするものについて説明します。私は後半の入り浸りに撮影したと1 - - JavaScriptのパフォーマンスを評価するための基本的

https://github.com/jquery/jquery/blob/master/src/core.js#L78-188、この部分

if (selector.nodeType) { 
    this.context = this[0] = selector; 
    this.length = 1; 
    return this; 
} 
3

はい、パフォーマンス上の利点があります。

$(this)の結果をキャッシュすると、$()関数が複数呼び出されたり、同じ要素をすべて参照するいくつかの異なるjQueryオブジェクトが作成されることがなくなります。

0

$()関数は、要素のDOMノードを見つけて、定義されているときに追加していないブラウザ(IEブラウザ)のプロトタイプメソッドをそのノードに適用します。したがって、常にこの操作を実行します。パフォーマンスと可読性のために、$()関数呼び出しの出力を変数にキャッシュするほうがよいでしょう。

+0

jQueryはプロトタイプのメソッドを要素に追加しません。要素オブジェクトを拡張するMooTools(または別のjsライブラリ)と混同しています。 jQueryはその意味で要素を変更せず、代わりにjQueryオブジェクトを処理します。 – Krinkle

+1

私の間違い。ありがとうございました。 – matsko

0

jsperf.comは偉大なリソースです。

http://jsperf.com/jquery-cache-vs-no-cache

結果はこのスレッドで回答がエコーたとえば、次の試験は、非キャッシュされたのとキャッシュされたjQueryの要素の性能を評価します。

関連する問題