0

I have a jQuery DOM element node, and I want to search few elements from node. I have two solutions here

 1 : node.find('a,b,c,d,e').each(..)
 2 : node.find('a')...., node.find('b')....
 3 : node = jQuery([]).pushStack( node.find('a,b,c,d,e') ) etc..

Which one is preferable with large DOM element. I am looking for only speed.

4

1 回答 1

1

这个问题有点宽泛,但这是我对发布的代码的分析。

选项 3 只不过是一个更多余的选项 1:$.fn.find已经返回一个 jQuery 对象,不需要分解它并将其元素添加到另一个 jQuery 对象。

当您对每个元素执行完全不同的操作时,选项 2 很好:

node
  .find('a').doThis().end()
  .find('b').doThat();

请注意,这.end()很可能比node.find()再次使用要慢 - 变量查找通常比函数调用更快,但我们谈论的是微秒。

我认为选项 1 在性能方面是最好的,因为它只会执行一个 DOM 查询。

请注意,如果您正在应用没有特定元素逻辑的简单方法,则不需要.each(),因此您有一个选项 4:

 node.find('a,b,c,d,e').doSomething();

也就是说,jQuerydoSomething对每个匹配的元素进行隐式迭代。

除非在一个巨大的循环中应用,否则所有这些都将具有不明显的性能差异。jsPerf是运行性能测试的工具,但请注意,现代 JS 引擎(例如 V8)在优化重复行为方面做得非常好。

另外,请记住“过早的优化是万恶之源”。处理性能问题,因为它们变得明显。不要牺牲几微秒的可读性。您可以在部署之前使用诸如Closure Compiler之类的优化工具来获得一些微/毫秒的性能。

于 2013-06-04T11:30:20.290 回答