2012-12-17 88 views
6

我經常使用$(this)裏面的jQuery事件處理程序,永遠不會緩存它。如果我會做

var $this = $(this); 

並將使用變量而不是構造函數,我的代碼將得到任何顯着的額外性能?


JS逆足測試測量從這個優化的性能增益:http://jsperf.com/jquery-this-caching

+0

這取決於它使用的頻率。 '$(this)'構造一個新的jQuery對象,以及與之相關的一切。一般來說,如果你要在代碼塊中多次使用'$(this)',你應該緩存它。特別是如果你正在循環做。 – Shmiddty

+1

將'$(this)'緩存在var中總是會更快。可以確定的是微觀優化。你肯定需要緩存任何選擇器,因爲這有更大的影響。 –

+0

如果您在相同的調用堆棧中對它進行100次評估,則執行速度可能會降低1毫秒或2毫秒。 –

回答

9

一個極小的微小微乎其微難以察覺的一個,是的。重大?編號

每次你做$(this),它會導致幾個函數調用和一些內存分配。函數調用既不在這裏,也不在那裏(即使在IE6上,我也是surprised to learn),但內存流失可能會增加瀏覽器,而這些瀏覽器不能很好地處理內存管理。大多數現代的做。

我總是將結果保存到一個變量,因爲我只是不喜歡調用函數和不必要地分配對象。它節省了輸入那些parens。 :-)

+2

我只是適用於我所有其他編程中的相同規則。如果我在一個函數中多次調用同一個函數,我會緩存結果,所以我不必多次調用它。 '$()'是一個函數調用。一直以此爲指導,爲期30年。 – jfriend00

+0

@ jfriend00:是的,我也是(和一段驚人的相似的時間段......)。 –

3

是的,因爲每次你做$(this)你創建一個新的jQuery對象。
但是,如果超過1000倍,您將無法獲得顯着的性能

緩存不止一次使用的對象是一種很好的做法。