在所有地方重复$(),或者声明一次然后重用

repeat $() all over the place or declare once and reuse?

本文关键字:一次 然后 声明 方重复 或者      更新时间:2023-09-26

使用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();

有意义吗?

完全正确!

为什么缓存

缓存的另一个好处是代码的可维护性。如果选择器只在一个地方,那么修改它只需要在一个地方完成。相信我,这让维护代码更容易。 连锁

尽管你可以更进一步(在相关的地方),把你的呼叫串联起来:

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

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

所以,为什么人们仍然[在]使用$()

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

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

最后,有一些基准测试(从一个快速的谷歌),试图声称这无关紧要,甚至可能更快而不是缓存。大多数这些基准测试的问题,以及我为什么建议您在从中得出结论时非常谨慎的原因,是示例中的DOM不是真实的;这太简单了。其次,选择器也很简单。当然,查询将是闪电般的快,缓存不会有太大的区别,但我不认为它们是决定性的。

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