【问题标题】:repeat $() all over the place or declare once and reuse?在整个地方重复 $() 或声明一次并重用?
【发布时间】:2011-10-19 13:50:14
【问题描述】:

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

有意义吗?

【问题讨论】:

标签: javascript jquery overhead


【解决方案1】:

绝对正确!

为什么要缓存

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

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

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

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

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

人们使用大量$() 的一个原因是他们不了解更多信息。

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

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

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

【讨论】:

  • +1 用于链接。此外,从读取源代码的 IIRC 来看,jQuery 将缓存最后一个查询,因此在 James 的示例中,这并不重要。
  • 但是如果调用在代码中的不同位置,那么上面的“声明第一个,然后重用”会是一个好习惯吗?如果是这样,为什么我会看到如此猖獗的 $() 到处重复?
  • 我需要改进我的问题,以反映我想要做得更好。这里是犹太教吗?
  • @James,是的,您可以更新您的问题。虽然我试图更新我的答案来解释为什么人们可能会过度使用$()
  • @James - 重复 $() 很猖獗,因为很多人都不知道更好;这与一些非 jQuery 人员不必要地重复 document.getElementById()(或其他 DOM 函数)的方式相同。话虽如此,我不会费心尝试缓存以在多个不相关的函数中使用,但在单个函数中我缓存,因为这样很容易跟踪缓存变量 - 假设我不能' t 只是像已经建议的那样链接。
猜你喜欢
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多