2013-01-21 79 views
10

我见过很多例子(包括最喜欢的Twitter的引导),其中各种API使用$("[data-something]")而不是$(".something")jQuery data- * vs类选择器 - 性能?

Nethertheless选择我试图找到有关这两种不同的选择之间的性能信息。我很惊讶,许多性能测试也发现,这些选择也同样快于最现代的浏览器,所以我决定做my own test

我真的很困惑,现在,我不知道这是否是我的测试做错了(不知何故?)还是我之前检查过的其他测试?

任何人可以提供更多的信息,如果我做错了什么,而测试或者是这些测试正确和数据属性选择其实是非常慢的,比普通选择?

谢谢

+1

我想是因为'数据attribute'使用是'querySelectorAll'或者如果需要的话嘶嘶声,而普通类使用更快的'getElementsByClassName'。检查http://jsperf.com/class-vs-data-1 – elclanrs

+0

嗯,我明白,但只要我阅读之前,我惊讶地发现,对于这两种选择,这就是为什么我做了我自己的测试,现在一些测试显示相同的性能我想要确认那些测试是否正确。或者,也许有人可以指出我做错了什么:) –

+0

我会说是的,这些结果似乎对我来说是正确的。这是微不足道的,虽然,除非你有一个像一千元素... – elclanrs

回答

4

当使用属性选择,性能可能会因您的浏览器支持querySelector变化。 jQuery将回退到一个内置的库(称为SizzleJS),这是一个慢得多。在类名

选择会更快,因为它总是使用getElementsByClassName方法也就是通常支持所有常见的浏览器。

我看到它的方式,类用于不同的目的,然后数据属性。类将会对元素进行“分类”,以便它们可以被正确设计并创建结构。

数据属性正是:数据。有时你需要在你的元素中存储额外的数据。例如:

<table> 
    <tr data-id="4" data-category="1"> 
     <td>Name</td> 
     <td>Email</td> 
    </tr> 
</table> 

请注意,由于相同的原因,我没有使用常规的“id”属性。