2011-07-05 47 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

回答

3

是的,有性能優勢。

緩存$(this)的結果可避免多次調用$()函數以及創建幾個不同的jQuery對象,這些對象都引用同一元素。

0

$()函數查找元素的DOM節點,並將原型方法應用於未定義(IE瀏覽器)時尚未添加它們的瀏覽器。所以不斷的調用它會執行這個操作。性能和可讀性更好地將$()函數調用的輸出緩存到變量。

+0

jQuery不會將原型方法添加到元素中。你對擴展元素對象的MooTools(或另一個js庫)感到困惑。 jQuery在這個意義上保持元素不變,而是用jQuery對象處理。 – Krinkle

+1

我的錯誤。謝謝。 – matsko

0

jsperf.com是一個很好的資源 - 而且我已經採取了晚光顧 - 評估JavaScript性能。例如,下面的測試評估緩存jQuery的元素,以非高速緩存的性能:

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

結果回聲在這個線程的答案。

相關問題