Javascript 什么';当使用jQuery检查可见性时,$.data()或$.is(';:visible';)会更快吗?

Javascript 什么';当使用jQuery检查可见性时,$.data()或$.is(';:visible';)会更快吗?,javascript,jquery,performance,Javascript,Jquery,Performance,今天,当我为显示和隐藏菜单的两个方法编写代码时,我做了一个小测试,以查看检查菜单可见性的最有效方法 结果因浏览器而异,FF 4.0b12使用$更快。数据,但Chrome(webkit)和Opera使用$更快。是(':visible') 我无法在IE9上测试,因为浏览器一直锁定我! 以下是测试用例: 那么,用jQuery检查可见性最有效的方法是什么呢?$('whatever')。is(':visible')读起来最好。我认为这才是重要的。除非你需要每秒检查数百个元素,否则我不会浪费时间 “我们应该

今天,当我为显示和隐藏菜单的两个方法编写代码时,我做了一个小测试,以查看检查菜单可见性的最有效方法

结果因浏览器而异,FF 4.0b12使用<代码>$更快。数据,但Chrome(webkit)和Opera使用<代码>$更快。是(':visible')

我无法在IE9上测试,因为浏览器一直锁定我! 以下是测试用例:

那么,用jQuery检查可见性最有效的方法是什么呢?

$('whatever')。is(':visible')
读起来最好。我认为这才是重要的。除非你需要每秒检查数百个元素,否则我不会浪费时间

“我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源”

高德纳

如果您必须获得最佳性能,请放弃jQuery并使用本机JavaScript。

因为
是(':visible')
也测试祖先的可见性,在元素上测试
数据将更快

使用
data('hidden')
比使用
attr('data-hidden')
更快,因为布尔值存储为布尔值,而不是转换为字符串或从字符串转换而来

更新的JSPerf:


对于特定的测试用例,我还添加了一个基本的
.toggle()
,这样所有的迭代和检查都由jQuery完成,但这仍然比使用
每个
和测试数据稍微慢一些。我猜这与
attr
data
toggle()
检查属性(例如对于
display:none
)慢的原因类似。

$('whatever')。是(':visible')
读得最好。我想这才是最重要的。”[IE9]一直锁定着我!”感谢我每天所需要的娱乐。有些浏览器永远不会改变…这听起来像是过早的优化。作为代码的读者,
.is(“:visible:”)
比IMHO更清晰。我同意@Matt。。特别是在显示/隐藏菜单时,我同意,但如果我没有太多的菜单,并且在菜单显示或隐藏时运行的函数很少,我实际上不会进行优化,因此这是必要的(当然要以可读性为代价)。谢谢,我已经假设好的程序员会指出这一点,这就是为什么我写了“使用jQuery”:)。更新:天哪,快了93%,我从没想过会快那么多@Maher4我今天错过了一切。我只想说,如果性能符合您的要求,那么如果您只使用jQuery的API,您将永远无法获得像native一样快的速度。@alex我完全同意您的看法,我只是想得到关于这一问题的反馈,非常感谢您的反馈。@Maher4别担心,我希望您能获得所需的效率。