【问题标题】:When should I use $(object), and when should I use $object? [duplicate]什么时候应该使用 $(object),什么时候应该使用 $object? [复制]
【发布时间】:2014-09-10 18:00:36
【问题描述】:

假设我有一个匹配“.foo”的元素。

<div class="foo"></div>

我从经验中了解到多次调用查找器会降低性能,例如,如果我尝试多次更改同一个对象。

$(".foo").doOneThing();
$(".foo").doAnotherThing();
$(".foo").doSomethingElse();
// Makes jQuery look for ".foo" three times, bad!

$foo = $(".foo");
$foo.callAllThreeOfTheThingMethodsInThePreviousBlock();
// Calls $(".foo") only once, but occupies memory with a jQuery object version of the foo div.

我的问题是,在留出内存来保存 jQuery 对象而不是再次调用 jQuery 方法之前,您必须使用这个查找器多少次?

我问,自从前几天我把我不止一次调用的每一个查找器都放入了一个存储的 $object 变量中;我的老板说过,如果我只使用取景器,比如两到三遍,就改用取景器而不是存储的对象。您对此有何看法?

【问题讨论】:

  • 同一组物品找三遍是没有意义的,不如把它保存到一个局部变量中!
  • 如果出现不止一次,我倾向于为它提升一个 var。我对所有东西都这样做,即使是简单的字符串。 $(".foo").doOneThing().doAnotherThing().doSomethingElse(); 也可以工作,哈哈。
  • 只是一个小插曲来展示这两种不同的方式在大量操作中的表现。 plnkr.co/edit/lb3Cew3j1p5HE5goCgqd?p=preview
  • 只是 Pr0gr4mm3r 的 plunker 已经是一个很好的理由。虽小,但速度相差近 3 倍。
  • @RaphaelDDL 您最后一次注意到 50 毫秒和 100 毫秒之间的差异是什么时候?

标签: javascript jquery


【解决方案1】:

使用var $foo = $(".foo");

多次使用$(".foo")会使jQuery重复搜索。看起来 jQuery 不缓存选择器,即使这样做了,最好自己聪明一点,不要依赖别人。

Does jQuery do any kind of caching of “selectors”?

【讨论】:

  • 我不认为 jQuery 缓存选择器。如果是这样,那一定是一些严肃的魔法,因为 dom 可能会改变并搞砸一切......
  • @m59 好点。已编辑。
  • 这是 OP 用例的正确答案,但值得注意的是,将 jQuery 对象“保存”在变量中将在搜索时缓存选择 - 尝试再次使用它after DOM 更改可能会给您带来意想不到的结果。
【解决方案2】:

在大多数查询重复的情况下,建议将查询结果存储在变量中。 根据你的情况,你也可以像这样依次调用函数。

$(".foo").doOneThing().doAnotherThing().doAnotherThing();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-26
    • 2023-04-02
    • 2011-04-15
    • 2017-04-10
    • 2012-03-19
    • 2018-05-12
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多