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

时间:2011-08-04 00:25:17

标签: javascript jquery overhead

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

有意义吗?

1 个答案:

答案 0 :(得分:6)

绝对正确!

为什么要缓存

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

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

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

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

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

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

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

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

那就是说,如果你的例子类似于基准的例子,那么也许你可以得出你自己的间接结论,而缓存可能只会令人讨厌。