`
乡村里的一条土狗
  • 浏览: 70312 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

101 jquery选择器性能

阅读更多

 

上周,我分析了一个网页,自定义脚本的onLoad事件处理耗时4.8秒。原来,2.8秒花费在请求一个动态菜单库(关于此,另外发博)。剩余2秒花费在了jquery 选择器上。分析显示,大多数的选择器未返回任何对象,那些返回的对象可以通过使用不同的选择器改善。

 

关于jq uery 选择器

 

已有一些关于jquery 选择器及其性能影响的很好的博客文章。如你所见,你可以通过ID、标签名或者类名选择元素。根据不同的选择,jquery 会使用浏览器原生方法查询元素,通过ID、标签或需要手动根据类名遍历DOM(因为IE中没有getElementsByClassName方法)

 

分析我网页中花费的2秒

 

onLoad操作使 jquery 隐藏、显示和改变页面中某些特定元素的样式表,……。下面是代码片段。

Sample jQuery Script exected in onLoad

onLoad执行的jquery 脚本示例

onLoad 事件处理中充斥着这些调用。使用免费的dynaTrace AJAX Edition,你可以看到那些处理选择器的单独$调用,以及下列使用选择器处理至少一个对象的方法调用。下列onLoad事件处理的PurePath不 仅向我显示有多少时间花费在那些选择器调用,同时显示有多少选择器实际上根本没找到一个对象。(下列方法调用缺失表明没有找到对象)

Unnecessary jQuery Selector Calls causing massive overhead

不必要的jquery 选择器开用导致大量开销

用 红色标记的是所有没有返回元素的调用,因为没有DOM元素满足选择条件。JS列显示每个独立方法调用的执行时间——每个调用时间从1ms 到>100ms不等。Size列告诉我们每个独立调用发生了多少JavaScript/DOM调用。这里我们也能看出为什么某些$调用花了这么长时 间,因为他们产生很多调用以完成请求。Invocation列告诉我们一个方法被父方法调用的频度。我们可以从这里看出,一些对象实际被处理了多次, 如".pop-cart"。只处理一次然后缓存该对象会更好。

从中学到的第一个教训是,这些调用大多数是不必要的,只是造成大量的开销。如果你知道页面上有哪些元素,你应该只处理哪些对象,不要试图处理其他的。我知道,有些全局的javascript文件操作不同页面的不同内容会导致这样的情形,但是,你真的想与这些开销相伴吗?

 

分析jquery 选择器的差异

 

被分析的页面的首要问题是,产生了太多不必要的$调用。接下来的另一个问题是为什么有些$方法响应很快(几毫秒)而其它方法花费很长时间(高达100ms)。理论答案可 jquery 最佳实践博客中找到。回到我的页面,它向我显示下列内容:

ID选择器是最快的,使用getElementById

下面的图片使用ID的选择器,它使用getElementById并因此很快返回结果。

jQuery Selector by ID

jquery ID选择器

标签名选择器,使用getElementByTag

下面的例子使用标签名和类名,jquery 首先使用getEelementsByTagName,这是获取指定标签的所有元素的原生实现。jquery 接着遍历这些条目筛选类名。

jQuery Selector by Tag and ClassName

使用标签和类名的jquery 选择器

类名选择器需要遍历所有DOM元素

如果你只使用类名选择器 - jquery 需要遍历DOM中的每个元素,因为IE中没有原生的getElementsByClassName方法(Firefox是另一回事)。下面的图片显示一个有3460个DOM元素的选择器开销:

jQuery Selector by Class Name

jquery 类名选择器

 

结论

 

依 赖于你网站的规模(DOM元素的数量),你应考虑单独的选择器方法的开销。你可能要考虑替换类名选择器,使用标签名和类名,或者使用单一ID,如果你的页 面中只有屈指可数的对象。再者,确保缓存已处理对象,以避免此后的处理开销。此外——最后但并非微不足道的——避免不必要的调用,正如我分析的页面中看到 的——不发生这些调用,2秒之中超过1.5秒是可以节省的。

 

15
4
分享到:
评论
3 楼 hesy_007 2009-12-10  
博主用的什么分析工具啊?
2 楼 hyj1254 2009-12-09  
学习了!
1 楼 jkfzero 2009-12-08  
楼主没说用的哪个版本,1.3基础速度的比起1.2已经好很多了。
相比之下YUI的选择器差很多,再优化工作量巨大。

相关推荐

    jQuery选择器的一个Bug

    然而,即便如此成熟的库,也难免存在一些已知的问题和限制,其中之一就是我们今天要探讨的"jQuery选择器的一个Bug"。 首先,我们要理解jQuery选择器的基本原理。jQuery基于CSS选择器,它允许开发者通过类似CSS的...

    Java模拟Jquery选择器

    本主题将深入探讨如何使用`org.htmlparser.Parser`这个Java库来模拟JavaScript中的jQuery选择器,以实现类似的页面元素查找功能。 `org.htmlparser.Parser`是HTMLParser项目的一部分,它是一个用于解析HTML文档的...

    jquery周历选择器

    本项目“jquery周历选择器”利用jQuery的灵活性和易用性,构建了一个适用于混合应用程序(Hybrid App)的周历选择器组件。 1. **周历选择器设计**: - 周历选择器通常用于日程管理或时间规划应用,显示一周的日期...

    jquery样式选择器插件源码demo

    通过阅读和理解这段源码,开发者不仅可以学习到jQuery选择器的工作原理,还能提升对CSS选择器、DOM操作以及JavaScript性能优化的理解。 总结来说,这个"jquery样式选择器插件"是一个浓缩的精华,它展示了如何用最少...

    Jquery实验室的选择器工具

    虽然jQuery选择器非常强大,但在处理大量元素时,应避免使用过于复杂的选择器,因为这可能影响性能。优先使用ID选择器,其次类选择器,再是属性选择器,尽量减少层级选择器的使用。 ### 实验室实践 在“jQuery实验...

    jquery 城市选择器

    《jQuery城市选择器详解》 在网页开发中,经常需要实现一种功能,即用户可以选择他们的所在省份和城市,这在注册、填写地址等场景中尤为常见。jQuery城市选择器就是解决这一需求的有效工具,它利用JavaScript和...

    一个简单的jQuery时间选择器

    【标题】"一个简单的jQuery时间选择器" 描述了如何使用jQuery库来创建一个用户友好的时间选择界面。在Web开发中,特别是涉及到用户输入时间的场景,如预订、会议安排等,拥有一个直观易用的时间选择器可以极大提升...

    jQuery选择器全集详解

    而jQuery选择器是jQuery的核心部分之一,用于选择页面元素,以便我们可以对它们进行操作。这些选择器可以分成多个类别,包括基本选择器、层次选择器、过滤选择器等,下面将详细介绍。 基本选择器包括id选择器、...

    jQuery选择器全面总结

    这篇文章将对jQuery选择器进行全面总结,帮助开发者更好地理解和运用这些工具。 首先,我们要了解基本选择器,这是jQuery选择器的基础。包括: 1. **ID选择器**: 使用`#`符号后跟元素的ID,如`jQuery("#ID")`,它...

    jQuery商品价格选择器

    首先,我们要理解jQuery选择器的核心概念。jQuery选择器是用于选取HTML元素的工具,它基于CSS选择器,同时添加了一些扩展,使得我们可以更高效地定位和操作DOM元素。例如,`$("#myID")`用于选取ID为"myID"的元素,`$...

    JQuery选择器详解JQuery选择器详解

    JQuery选择器是jQuery库中的核心功能之一,它极大地简化了JavaScript中对DOM元素的选取,使得开发者可以更高效地操作网页元素。本篇将详细阐述JQuery选择器的使用和原理。 一、基础选择器 JQuery的基础选择器包括ID...

    jquery一些案列和一些选择器

    以下是一些常见的jQuery选择器: - **ID选择器**: `$("#elementId")` - 通过元素的ID查找元素,例如:`$("#myDiv")`。 - **类选择器**: `$(".className")` - 通过类名查找元素,例如:`$(".myClass")`。 - **元素...

    jquery颜色选择器源码

    1. jQuery选择器和DOM操作:如何使用jQuery选择特定的HTML元素,如`.addClass()`, `.removeClass()`, `.val()`等方法来改变元素的样式和内容。 2. 事件处理:掌握`.on()`, `.click()`, `.change()`等事件监听器的...

    jquery 颜色选择器,使用简单

    jQuery,一个流行的JavaScript库,提供了许多插件来简化开发人员的工作,其中包括颜色选择器。本篇文章将深入探讨如何利用jQuery轻松实现颜色选择功能,以提高用户界面的交互性。 一、jQuery颜色选择器简介 jQuery...

    jQuery日期选择器插件

    **jQuery日期选择器插件**是一种广泛应用于网页开发中的组件,它允许用户通过交互式的日历界面方便地选择日期。这种插件极大地提高了用户在网页上输入日期的体验,尤其适用于需要用户输入生日、预约日期或者截止日期...

    jquery输入框颜色选择器插件

    《jQuery输入框颜色选择器插件详解》 在网页开发中,为了提升用户体验,经常会遇到需要用户选择颜色的场景。jQuery作为一个广泛使用的JavaScript库,提供了丰富的插件来满足这一需求。"jQuery输入框颜色选择器插件...

    jquery 城市联动选择器

    **jQuery城市联动选择器** 在Web开发中,用户界面经常需要提供一种便捷的方式来选择地理位置,例如省份、城市和区县。这种需求催生了各种各样的联动选择器,其中`jQuery`城市联动选择器是一个非常实用的解决方案。...

    jquery 城市三字码 选择器

    标题中的“jquery 城市三字码 选择器”是指使用jQuery库开发的一个功能,它允许用户在前端界面中选择城市,同时返回该城市的三字码。在国际航空运输协会(IATA)的标准中,每个城市都有一个三位字母的代码,方便在...

    jquery选择器实例和jar包

    本文将深入探讨jQuery选择器的实例和相关知识,帮助你掌握这一强大的工具。** **1. 元素选择器** 元素选择器基于HTML标签名来选取元素,例如`$("p")`会选择所有的段落元素。通过实例,我们可以看到如何获取并改变...

    jQuery表单选择器源码

    **jQuery表单选择器源码解析** jQuery是一个广泛使用的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画效果以及Ajax交互。在jQuery中,表单选择器是用于高效地定位和操作HTML表单元素的重要工具...

Global site tag (gtag.js) - Google Analytics