如果多次使用它,我应该在jQuery中缓存$(this)吗?

时间:2011-07-05 19:15:18

标签: jquery performance jquery-selectors

我知道如果你多次使用它,你应该缓存选择器的结果。一个例子是:

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));
}

4 个答案:

答案 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

结果回应了这个帖子中的答案。