在整个地方重复$()或声明一次并重复使用?

Jam*_*mes 3 javascript jquery overhead

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

$('blah').doSomething(); 
//bunch of code
$('blah').doSomethingElse();
//bunch of code
$('blah').doOtherStuff();
Run Code Online (Sandbox Code Playgroud)

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

如果是这样,它会减少对象创建开销,而不是这样做:

var blah = $('blah');
blah.doSomething(); 
//bunch of code
blah.doSomethingElse();
//bunch of code
blah.doOtherStuff();
Run Code Online (Sandbox Code Playgroud)

合理?

dav*_*vin 6

完全正确!

为何缓存

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

虽然你可以更进一步(相关),并链接你的电话:

$('blah')
.doSomething()
.doSomethingElse()
.doOtherStuff();
Run Code Online (Sandbox Code Playgroud)

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

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

人们使用大量的一个原因$()是因为他们不知道更好.

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

最后,还有基准(游逛一个 2从快速谷歌),尝试声称没关系或者甚至更快的缓存.大多数这些基准测试的问题以及为什么我建议你对从中得出结论非常谨慎,这个例子中的DOM不是现实世界; 这太简单了.其次,选择器也是简单的.所以当然查询会很快,并且缓存不会产生很大的影响,但我并没有找到它们.

也就是说,如果您的示例与基准测试的示例类似,那么也许您可以得出自己的间接结论,而缓存可能只会令人讨厌.