http://www.ituring.com.cn/article/382
jQuery代码优化:遍历篇
与使用选择符查找页面中的元素相对应,jQuery遍历操作背后的工作机制也很有特色。了解了jQuery对DOM进行遍历背后的工作机制,可以在编写代码时有意识地避免一些不必要的重复操作,从而提升代码的性能。本文就从jQuery的遍历机制入手简单探讨一下优化jQuery代码的问题。
jQuery对象栈
jQuery内部维护着一个jQuery对象栈。每个遍历方法都会找到一组新元素(一个jQuery对象),然后jQuery会把这组元素推入到栈中。而每个jQuery对象都有三个属性:context、selector和prevObject,其中的prevObject属性就指向这个对象栈中的前一个对象,而通过这个属性可以回溯到最初的DOM元素集。
jQuery为我们操作这个内部对象栈提供了两个非常有用的方法:
.end()
.andSelf()
调用第一个方法只是简单地弹出一个对象(结果就是回到前一个jQuery对象)。第二个方法更有意思,调用它会在栈中回溯一个位置,然后把两个位置上的元素集组合起来,并把这个新的、组合之后的元素集推入栈的上方。
利用这个DOM元素栈可以减少重复的查询和遍历的操作,而减少重复操作也正是优化jQuery代码性能的关键所在。
优化示例
下面是一个函数(省略了前后代码),用于实现表格行条纹效果:
function stripe() {
$('#news').find('tr.alt').removeClass('alt');
$('#news tbody').each(function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt');
});
}
stripe()函数两次使用了ID选择符#news查找元素:一次是为了从带有alt类的行中删除该类,另一次是为了给新选中的行添加这个类。
优化这个函数的方法有两个,一是连缀。
连缀
连缀优化利用的就是jQuery的内部对象栈和.end()方法。优化后的代码如下:
function stripe() {
$('#news').
find('tr.alt').removeClass('alt').end()
find('tbody').each(function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt');
});
}
第一次调用.find()会把表格行推到栈上,然后的.end()方法则把这些行弹出,从而让下一次调用.find()仍然是在#news表格上执行操作。这样就把两次选择符查找减少为一次。
另一个优化方法是缓存。
缓存
所谓缓存,在这里就是把之前操作的结果保存起来,以便将来重用。优化后的代码如下:
var $news = $('#news');
function stripe() {
$news.find('tr.alt').removeClass('alt');
$news.find('tbody').each(function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt');
});
}
与连缀的方法相比,缓存方式稍嫌冗长,因为额外创建了一个用于保存jQuery对象的变量。但从另一个角度来看,这种方式在代码中可以实现对选中元素的两次操作完全分离,而这也许可以满足我们其他情况下的需求。同样,因为可以把选中的元素保存在stripe()函数之外,也就避免了每次调用函数时重复查询选择符的操作。
结论
利用jQuery的内部对象栈和缓存,可以减少重复的DOM查询及遍历,从而提高脚本执行速度。
因为根据ID在页面中选择元素速度极快,以上两个例子在优化前后不会有明显的性能差异。在实际编码中,应该选择可读性最好、最容易维护的方式。如果真的遇到了性能瓶颈,以上优化技术都可以起到立竿见影的效果。
分享到:
相关推荐
本文就从jQuery的遍历机制入手简单探讨一下优化jQuery代码的问题。 jQuery对象栈 jQuery内部维护着一个jQuery对象栈。每个遍历方法都会找到一组新元素(一个jQuery对象),然后jQuery会把这组元素推入到栈中。而每个...
因此我们有必要对我们自己书写的jquery代码进行优化,以达到更快捷、更流畅的运行效果。 jquery性能优化高级技巧,下面主要从七个方面对jquery性能优化做介绍: 1.通过CDN(Content Delivery Network)引入jQuery库...
4. **编写jQuery代码**:这是核心部分。我们需要监听鼠标悬停事件,当事件触发时,创建并显示tooltip。jQuery的`.hover()`方法可以方便地处理这一过程。同时,可能还需要处理鼠标离开时隐藏tooltip的逻辑。 5. **...
同时,该版本还优化了事件处理,增加了`.on()`和`.off()`方法,取代了早期的事件绑定和解绑方式,提高了代码的可维护性。 jQuery1.8.3进一步提升了性能和API一致性。在这个版本中,开发者可以更方便地使用jQuery...
在实际应用中,为了用户体验和性能优化,可能还需要处理错误,添加loading指示器,以及考虑数据缓存等细节。同时,确保遵守API的使用规定,避免过于频繁的请求导致被封禁。 这就是“jquery实例4:动态显示股票信息”...
10. **性能优化**: 使用`$(document).ready()`确保DOM加载完成后执行脚本,减少DOM操作以提高性能,使用 delegated event handling 处理大型动态内容等都是jQuery性能优化的技巧。 离线的HTML版本的jQuery手册不仅...
本文主要总结了几个关于jQuery代码优化的方法,以帮助开发者实现更高效、更快捷的代码运行。 首先,选择器的选取至关重要。ID选择器(如`#id`)和元素标签选择器(如`$('form')`, `$('input')`)是执行速度最快的...
- 使用匿名函数包裹jQuery代码:`(function($){})(jQuery);`避免全局污染。 6. jQuery Mobile与jQuery UI - jQuery Mobile:专为移动设备设计的UI框架,提供触摸友好的交互和组件。 - jQuery UI:提供了丰富的...
《超实用的jQuery代码段》是由周敏编著的一部汇集了众多实用jQuery代码的资源集合,旨在帮助开发者提升在Web开发中的效率和效果。jQuery是一个强大的JavaScript库,它简化了HTML文档遍历、事件处理、动画制作以及...
本篇将详细解析一个基于jQuery实现的三排图标上下翻滚的抽奖游戏机代码,帮助开发者理解和运用这一技术。 一、jQuery基础介绍 jQuery是一个高效、简洁且功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、...
这个压缩包文件“超实用的jQuery代码段”显然是一份汇集了多个常见和实用jQuery代码片段的资源,对于前端开发者来说极具价值。下面,我们将深入探讨这些关键知识点。 1. **选择器**:jQuery的选择器使得选取DOM元素...
2. **《Jquery1.2.6源码分析.pdf》**:这本书籍或文章可能详细剖析了jQuery 1.2.6版本的源代码,帮助开发者理解jQuery的内部工作原理,包括如何优化性能、处理DOM操作、实现高效选择器等。通过源码分析,开发者可以...
《锋利的jQuery代码》是一本深入探讨jQuery技术的书籍,其主要目标是帮助开发者熟练掌握和高效利用jQuery库来创建交互式、响应式的Web应用。jQuery是一个强大的JavaScript库,它简化了HTML文档遍历、事件处理、动画...
然而,随着网页复杂性的增加,优化jQuery代码以提高性能变得至关重要。以下是一些关于jQuery性能优化的关键知识点,这些内容可能在"jQuery性能优化指南1.htm、jQuery性能优化指南2.htm、jQuery性能优化指南3.htm"中...
jQuery是一个流行的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互等操作。...而且,由于其简单的语法和强大的功能,即使是对jQuery不太熟悉的新手,也可以轻松掌握并利用它来优化他们的代码。
2. **事件处理**:详述jQuery中的事件绑定与解绑,如click、mouseover等常见事件,以及如何使用事件委托来优化性能。同时,会讨论事件对象和自定义事件的使用。 3. **DOM操作**:详细解析jQuery中的DOM操作方法,如...
在编写jQuery代码时,性能优化是一项关键任务,因为高效的代码能提供更好的用户体验,尤其是在处理大量数据或复杂交互时。本文将深入探讨12种优化jQuery代码的方法,旨在提高执行效率和整体性能。 首先,从ID选择器...
7. **性能优化**: 探讨如何编写高性能的jQuery代码,避免常见性能陷阱。 8. **兼容性问题**: 了解jQuery对不同浏览器的兼容策略,如何确保代码在多种环境下稳定运行。 9. **最佳实践**: 遵循官方推荐的编码规范和...