我知道如果你多次使用它,你应该缓存选择器的结果。一个例子是:
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 :(得分:8)
是的,性能会有所提高,因为它会阻止jQuery解释您的选择器。
以下是选择器的解释,以及您将绕过的内容。 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;
}
答案 1 :(得分:3)
是的,有性能优势。
缓存$(this)
的结果可以避免多次调用$()
函数,并创建几个不同的jQuery对象,这些对象都引用相同的元素。
答案 2 :(得分:0)
$()函数找到元素的DOM节点,并将原型方法应用于已定义的浏览器(IE浏览器)。因此,不断调用它将执行此操作。将性能和可读性更好地将$()函数调用的输出缓存到变量。
答案 3 :(得分:0)
jsperf.com是一个很好的资源 - 也是我最近经常光顾的 - 用于评估JavaScript性能。例如,以下测试评估缓存的jQuery元素与非缓存元素的性能:
http://jsperf.com/jquery-cache-vs-no-cache
结果回应了这个帖子中的答案。