我总是保存find()
的结果,以避免多次子树遍历,如果我多次需要该值:
var $a_bar = $('div.foo').find('a.bar');
$a_bar.removeClass(...);
// ... code here
$a_bar.bazz();
而不是
$('div.foo').find('a.bar').removeClass(...);
// ... code here
$('div.foo').find('a.bar').bazz();
我想知道它是不是微优化......那么在JQuery
找到节点的成本/复杂度是多少?
答案 0 :(得分:8)
你可以在js perf上测试它:http://jsperf.com/ 只需创建一个测试并运行它。
我在这里创建了一个小测试:http://jsperf.com/jquery-find55
在我的浏览器上(firefox 18):
所以,是的,find
是“慢”,将它存储在变量中绝对是一个好主意。
答案 1 :(得分:1)
如果你要多次重复使用变量,cache
就像你正在做的那样绝对是一个好主意。
.find()
在您之前传递的jQuery对象中遍历,因此它只查看已经给出的内容,使其非常快。
var $mainElement = $('#whatever'),
$innerLIs = $mainElement.find('li'),
$innerTDs = $mainElement.find('td');
// Now that these are cached in memory, doing anything to them is very quick
$innerLIs.hide();
// etc etc
如果我们一直在查询它们,那么每次都必须查看DOM。一旦完成,它每次都会将它包装在jQuery对象中。
答案 2 :(得分:0)
如果你多次操纵相同的东西 - 最好做一个变量。
那样你只是操纵而不是每次都先查找它。
我删除了关于缩短代码的声明 - 这里是关于jQuery选择器的net-tuts article和“从右到左”的思考
答案 3 :(得分:0)
众所周知,jQuery的选择成本很高,然后运行.find
更是如此。缓存对象绝对是一个好主意,从干燥的角度来看也具有风格上的优势。