在jquery中缓存时,ID选择器比类选择器更快

我知道ID是一个比Javascript中的类更快的选择器。 但是如果我缓存选择器呢? 当缓存选择器时,如果它是类选择器,它的速度是否会不同,或者它是否与id选择器一样快?

例:

var $myclass = $('.myclass'); var $myid = $('#myid');

$ myid会比$ myclass快吗?

你有那些存储在变量中的东西。 所以两者的速度都是一样的。

当您迭代DOM以获取元素时,将发生性能损失。 那时ID选择器将比类选择器更快。

DOM node的缓存引用始终是最快的方式。 因此,一旦你有一个存储的参考,它如何到达那里没有任何区别。

桥的例子

想象一下,你的Javascript世界DOM世界之间有一座桥梁。 每次你想从DOM世界中的Javascript访问元素(“公民”)时,你需要越过那座桥……但这不是免费的……你需要支付相当昂贵的费用
所以你应该只这样做一次 ,因此只付一次

如果您知道元素的确切位置(存储在变量中),您可以立即访问它。

只是为了确保我没有错过这个标记……我想你的意思是

 

然后在jquery你做:

 var $myclass = $('.myclass'); var $myid = $('#myid'); 

我对jquery的理解是,在创建vars时创建$ myclass并不像创建$ myid那么快……但是当你稍后再回来使用它们时。 他们将是相同的速度。

看看这个提示

http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx?sms_ss=favorites

以上链接建议尽可能使用ID而不是类

说明:

jQuery使用类来选择DOM元素就像按ID过去选择元素一样简单,所以很容易比以前更自由地使用类。 通过ID选择仍然要好得多,因为jQuery使用浏览器的本机方法(getElementByID)来执行此操作,并且不必执行任何自己的DOM遍历,这要快得多。 多快了? 让我们来看看。

我将使用前面的示例并对其进行调整,以便我们创建的每个LI都添加了一个唯一的类。 然后我会循环并选择每一次。

 // Create our list var myList = $('.myList'); var myListItems = '
    '; for (i = 0; i < 1000; i++) { myListItems += '
  • This is a list item
  • '; } myListItems += '
'; myList.html(myListItems); // Select each item once for (i = 0; i < 1000; i++) { var selectedItem = $('.listItem' + i); }

就像我认为我的浏览器已挂起一样,它完成了5066毫秒(超过5秒)。 所以我修改了代码,为每个项目提供ID而不是类,然后使用ID选择它们。

 // Create our list var myList = $('.myList'); var myListItems = '
    '; for (i = 0; i < 1000; i++) { myListItems += '
  • This is a list item
  • '; } myListItems += '
'; myList.html(myListItems); // Select each item once for (i = 0; i < 1000; i++) { var selectedItem = $('#listItem' + i); }

这次只用了61毫秒。 快近100倍。