我有一个这样的查询:
$('#tabContainer li');
JetBrains WebStorm IDE 强调它是一个低效的查询。它建议我改用这个:
$('#tabContainer').find('li')
怎么解释?是否有解释此类情况的文档?
在这篇文章中,有一部分是特异性的(第四点)。
如果有$('#tabContainer li')
,li
将查询文档中的所有内容。然后li
将检查其中的每一个以查看它们是否有 parent #tabContainer
。
为了更快地得到它,$('#tabContainer').find('li')
可以使用。li 将在文档中唯一的#tabContainer 中搜索。
但显然,如果您选择使用 ID,则性能应该不会有太大改善(来自关于 SO 的这个问题的答案也谈到了特异性)。
jQuery 会将前一个表达式翻译成后者。因此,唯一的区别是 jQuery 中的一些调用开销。在我看来是微不足道的。
但是:$('#tabContainer').find('li')
提高了可读性(至少对于不太熟悉选择器语法的人来说),我认为这是使用它的一个很好的理由..
我相信优化的原因是速度。Find 可能非常快,但对您的特定用例进行基准测试不会有任何坏处。例如,这是一个测试,它使用了一些与您尝试做的类似的可能变化。
http://jsperf.com/jquery-find-vs-context-sel/9
在这种情况下,查找速度非常快。现在,如果您只运行该选择一次;只要易于阅读/理解其意图,您采用哪种方式都无关紧要。