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

结果回声在这个线程的答案。

相关问题