使用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
),这意味着它不是这么大的交易缓存或不缓存,所以也许考虑到他们允许自己不缓存。
也就是说,如果您的示例与基准测试的示例相似,那么也许您可以得出自己的间接结论,缓存可能只是一个麻烦。