首页 > PHP资讯 > HTML5培训技术 > jQuery选择器的深入解析

jQuery选择器的深入解析

HTML5培训技术
关于jQuery选择器
正如大家所知道的,关于jQuery选择器可以通过以下几种方式获得:
1、可以通过ID 如:$("#ID");
2、通过TagName 如:$("A");
3、通过ClassName 如:$(".ClassName");
以上是几种经常用的关于JQuery选择器的使用,关于jQuery使用优化我们举一个例子来说明,在 onLoad处理器中对页面中某些特定的元素使用 jQuery 设置为隐藏,显示或改变样式表...。这里是一个代码片断:
$(".tooltip3").bgiframe({opacity:false});
$(".tooltip").bgiframe({opacity:false});
$(".shipAvailable-pop3").bgiframe({opacity:false});
在 onLoad 事件处理器中充满着这样的调用。通过使用免费的 dynaTrace AJAX Edition,你会看到被解析为选择器的 $ 调用,并跟随着那些方法调用,选择器至少都能获取到一个对象。下面通过 PurePath 对 onLoad事件处理器的观察,不仅给我们展示了每次选择器调用所耗费的时间,还包括在不只一个对象时实际找到的对象数(下面还没有哪个方法调用是连一个对象都找不到的).

     所有红色标记的调用都未返回一个元素,因为不存在直接基于查询条件的 DOM元素。JS 列显示了每一次单独方法调用的执行时间--范围在 1ms 到大于 100 ms。Size列告诉了我们每次单独的调用产生了多少次的 JavaScript/DOM的方法调用(译者注:指浏览器本地的调用)。这里我们也能明白,为什么某些 $调用花费了那么长时间,是因为它们实际进行了许多的调用来完成请求。Invocation列告诉了我们该方法被它的父级所调用的频度。这里我们可看出一些对象实际被解析了多次,比如:".pop-cart"。最好的做法应该是只解析一次得到对象并缓存起来。

  这里我们看到了上面多数调用是非必要的,只会产生过量的性能消耗,如果在这个过程中能确定需要解析出哪些页面元素,那么在这里就可以不用去解析其它的不相关的对象。
    在分析页面上的第一个问题是致使了太多的非必要 $ 调用。继而带来的另一个疑问就是为何某些 $方法响应很快(几微秒),而有些却用了相当长的时间(超过 100ms)。理论上的答案可以参看 jQuery Best PrticeBlog. 回到我的页面中来,它向我提示了如下的结论,ID 选择器,也就是使用了 getElementById,是最快的。

    下图展示了一个使用 ID 的选择器。它使用了getElementById,因此很快就返回了。

     TagName 选择器使用的是getElementsByTagName下面的例子是通过 TagName 搭配 ClassName 来选择元素。jQuery首先使用本地实现 getElementsByTagName 来获得所有指定标签的元素。接着遍历它们针对 ClssName进行过滤。
      

     ClassName 选择器需要遍历所有的 DOM 元素,如果你只用ClassName 选择器 -  jQuery 需要遍历 DOM 中的每一个元素,因为在 InternetExplorer(对于 FireFox 是另一番情景) 中没有对应于 getElementsByClassName的本地实现。下图显示了在一直有着 3460 个 DOM 元素的页面中选择器使用开销的情况。

    这里小编我做下对本章的总结,根据所开发的Web站点的大小(指DOM元素的数量),你需要考虑每个单独的选择器方法开销。相比于通过ClassName来选择,你应该优先考虑用TagName 搭配 ClassName 来选择,或是在你的页面只有少量对象时用唯一性的 ID 来选择。而且-确保缓存了已解析获得的对象,以避免再次解析调用时的开始。

HTML5培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持13不支持0