【发布时间】:2013-02-19 10:38:02
【问题描述】:
使用$("#vacations").find("li").last() 是否比$("#vacations li:last") 更好?
背景和我的想法:
我正在玩一个很好的互动try jQuery tutorial,其中一个任务说:
当您查看代码时,您注意到其他人正在选择最后一个假期:$("#vacations li:last")。你看着这个,你会想,“遍历会让这条路更快!”您应该根据这些想法采取行动,重构此代码以使用遍历查找 #vacations 中的最后一个 li。
我为什么会这样想?对我来说,选择器的使用看起来比遍历要高一些。在我看来,当我指定一个选择器时,jQuery 如何更好地获得我需要的单个结果(无需返回中间结果)。
使用复合选择器的额外开销是多少?是因为当前选择器逻辑的实现只是解析字符串并使用遍历 API 吗?解析字符串这么慢吗?未来的实现是否有可能使用不需要返回中间结果并且比遍历更快的事实?
【问题讨论】:
-
这是一个 jspref.com 为您运行的测试jsperf.com/is-jquery-traversal-preferred-over-selectors 您现在可以在不同的浏览器中轻松测试。
-
不发布新答案,因为它不那么相关,但对开发人员来说,两者都很有用:您可以使用选择器进行初始选择(可能很复杂),将结果保存到 jQuery 对象,然后有条件地运行代码 A 或 B,然后在 A 上运行一种遍历方法,在 B 上运行另一种遍历方法。它比有条件地构建一个字符串来选择正确的元素更容易(并且更不容易出错)。
标签: javascript jquery performance