3

使用 jQuery,如果我正在编写这样的代码

$('blah').doSomething(); 
//bunch of code
$('blah').doSomethingElse();
//bunch of code
$('blah').doOtherStuff();

每次我说 $('blah') 时都会创建一个新的 jQuery 对象吗?

如果是这样,是否会减少对象创建开销来做这样的事情:

var blah = $('blah');
blah.doSomething(); 
//bunch of code
blah.doSomethingElse();
//bunch of code
blah.doOtherStuff();

有道理?

4

1 回答 1

6

完全正确!

为什么要缓存

缓存的另一个好处是代码的可维护性。如果选择器仅在一处,则只需在一处进行更改。相信我,这让维护代码时的生活更轻松。

尽管您可以更进一步(在相关的情况下),并链接您的电话:

$('blah')
.doSomething()
.doSomethingElse()
.doOtherStuff();

由于两个原因,这稍微好一些。首先,您没有使用额外的变量,因此可以节省少量内存。其次,该语言不会为每个标识符的使用执行查找,因此它更快。

那么,为什么人们仍然[过度]使用$()

人们使用很多的原因之一$()是因为他们不知道更好。

另一个原因是因为元素选择过去比较慢。但是与浏览器中的大多数事情一样,使用选择器查询对象正在快速优化(document.querySelectorAll),这意味着缓存或不缓存并不是什么大问题,所以也许考虑到这一点,他们允许自己不缓存。

最后,有一些基准测试(一个来自快速谷歌的 两个)试图声称它无关紧要,或者甚至更快地缓存。大多数这些基准的问题以及为什么我建议您对从中得出结论非常谨慎,因为示例中的 DOM 不是真实世界的;它过于简单化了。其次,选择器也很简单。所以当然查询会很快,缓存不会有很大的不同,但我发现它们根本不是决定性的。

也就是说,如果您的示例与基准测试中的示例相似,那么也许您可以得出自己的间接结论,而缓存可能只是一件麻烦事。

于 2011-08-04T00:27:21.440 回答