`

8个能够有效帮助你提高jQuery代码性能的技巧

阅读更多
jQuery越来越流行了,大家可能也会发现,在浏览网站过程中,越来越多的网站开始使用jQuery来构建以前需要使用flash来实现的超酷动态效果,事实上jQuery已经成为前端开发中重要的类库之一,发挥着构建丰富web前端的利器。但是作为一个JS类库,很多人并不是非常清楚如何正确使用jQuery来达到最佳的性能(Peformacne),如果你觉得代码书写对于性能的影响不会那么巨大,那么我只能告诉你,当你使用jQuery开发一个复杂的动画和web应用的话,它有可能成为你性能上的终极噩梦。

在这篇文章中,我们将介绍代码书写中,大家应该需要注意的几个性能问题,希望对于大家在书写高性能的web应用中有帮助,大家在书写jQuery的过程中,尽量注意和避免这些性能的问题,才能写出高质量高性能的web应用,希望大家喜欢这篇文章。谢谢!

选择器Selector的使用

jQuery中的选择器selecor是大家经常使用的强大功能,事实上jQuery提供给我们非常丰富的手段来使用选择器定位DOM元素。但是很少有开发人员会考虑使用不同的选择器来处理性能问题。这里我们将介绍几种常用的选择器,及其它们之间的性能差异。

$("#id")


使用id来定位DOM元素无疑是最佳提高性能方式,因为jQuery底层将直接调用本地方法document.getElementbyId(),如果熟悉javascript的朋友应该了解这个方法将直接通过元素id来返回对应的元素。当然,如果这个方式不能直接找到你需要的元素,那么你可以考虑调用.find()方法。如下:

$("#gbid").find("div")

使用以上方法可以有效的缩小你定位的DOM元素。

$("p"),$("div"),$("input")


使用标签名是第二优化选择,因为jQuery将直接调用本地方法document.getElementsByTagname()来定位DOM元素。
$(".class")


使用.class方法对于我们来说稍微复杂些,对于比较新的浏览器例如,IE9,它支持本地方法document.getElementsByClassName(),而对于老的浏览器,例如,IE8或者更早版本来说,不得不使用DOM搜索方式来实现,自然会对于性能产生比较大的影响。所以大家得选择使用。
$("[attribute=value]")


对于利用属性来定位DOM元素,本地javascript方法中并没有直接的实现。所以大都都是使用DOM搜索方式来达到效果,很多现代浏览器支持querySelectorAll()方法,但是不同浏览器的性能还是有区别。总体来说,使用这种方式来定位DOM元素,并不是非常理想。所以为了获得更好的优化效果,你需要尽量避免这个对性能有害的使用方式。
$(":hidden")


和上面使用属性来定位DOM的方式类似,这种伪选择器也同样没有本地js方法来直接实现。而且jQuery需要搜索每一个元素来定位这个选择器,将会对你的应用带来比较大的性能问题。所以大家尽量不要使用,当然,如果你非要使用的话,请先是用find方法定位父元素,然后,再使用这个选择器,这样会帮助你很好的优化性能,如下:

$("#gbdiv").find(":hidden") 

以上是一个基本使用选择器的规则,自上而下性能依次下降,如果大家在开发中使用选择器,请遵循以上这个简单的优化性能规则。

当然,可能有朋友觉得的不是非常可信,那么这里我们将使用一个在线工具jsPerf来帮助大家更直观的查看性能区别,如下:

测试用例: http://jsperf.com/id-vs-class-vs-tag-selectors/2

链式调用是jQuery的一个非常不错的特性,它能够帮助你写出非常简洁的代码,主要的思想在于,处理同一个对象的时候,jQuery会返回一个jQuery对象,好处是你可以继续的处理下一个方法。非常典型的应用如下:
$("#gbdiv").hide();
$("#gbdiv").css("color", "#202020");
$("#gbdiv").show();

如果使用链式调用,优化性能如下:

$("#gbdiv").hide().css("color", "#202020").show();

好处在于你不用多次调用$("#gbdiv"),当然,如果你非要这样写,建议你考虑使用缓存方式。但是使用链式调用会使得jQuery代码更加简单并且性能更好。

缓存caching

在书写jQuery代码中,开发人员经常喜欢如下书写:

$("#gbdiv").hide();
$("#gbdiv").css("color", "#202020");
$("#gbdiv").show();

当然,无可厚非,编程中的跳跃思维导致你有可能这样书写代码,但是这样的结果是导致jQuery会在创建每一个选择器的过程中,查找DOM,比较好的优化性能方式是如下书写:

var gbin1=$("#gbdiv");
gbin1.hide();
gbin1.css("color", "#202020");
gbin1.show();

当然本例中,使用链式更加简洁,但是说了一个使用caching的重要,这和Java开发中不要随意的创建对象一样,可以帮助你有效的提高代码运行性能。
测试用例:http://jsperf.com/ns-jq-cached/3

事件代理

在jQuery1.7中提供了一个新的方式.on(),这个方法帮助你将整个事件监听封转到一个便利方法中,这里有个例子:

$('#gbin1').find('div').click(function() {
    $(this).toggleClass('gbin1');
});

这个方法很简单,找到指定ID的div,并且添加或者删除class=gbin1 。

如果你在#gbin1中有1000个div的话,你将绑定1000个事件。这将带来很负面的性能影响,使用.on方法,你可以重构如下,同样帮助你有效的优化性能:

$('#gbin1').on('click','div',function() {
    $(this).toggleClass('gbin1');
});

测试用例:http://jsperf.com/ns-jq-cached/3

循环语句中的DOM操作

使用jQuery可以很方便的添加,删除或者修改DOM节点,但是在一些循环,例如,for(), while()或者$.each()中处理节点,大家得注意一下,这里有个例子:

var data = ["Saab","Volvo","BMW"];
$.each(data, function(i, item){
  var newitem='<div>' + item + '</div>';
  $("#gbcontainer").append(newitem);  
});

以上代码中,我们将每一个新添加的tag都作为一个节点添加到容器ID中,实际上jQuery操作节点的成本也不低,更好的方式是尽可能的减少DOM操作,修改代码优化性能如下:

var data = ["Saab","Volvo","BMW"];
    tmp = ''; 
$.each(data, function(i, item){
    tmp +='<div>' + item + '</div>';
});
$("#gbcontainer").append(tmp);  
 
转载:http://www.gbin1.com/technology/jquery/20120222jqueryxingneng/index.html
分享到:
评论

相关推荐

    提高jQuery性能优化的技巧

    以上优化技巧都是通过减少不必要的计算和DOM操作,来提升jQuery代码的执行效率。在实际开发中,应用这些技巧可以显著改善页面的性能和用户体验。需要注意的是,虽然在本文中提到了扫描识别错误的问题,但通过上下文...

    jquery性能优化高级技巧

    本文将介绍一系列高级技巧,帮助开发者在编写jQuery代码时提高性能。 首先,通过CDN(内容分发网络)引入jQuery库是提升网站JavaScript性能最简单的一步。新发布的jQuery版本通常在性能上有所提升,并且修复了一些...

    50个jquery代码片段

    从给定的文件信息中,我们可以提炼出一系列关于jQuery的重要知识点,这50个代码片段不仅展示了jQuery的强大功能,还提供了实用的编程技巧,适用于各种JavaScript项目。以下是对部分代码片段的详细解释: ### 1. ...

    50个高级jQuery代码开发技巧

    ### 50个高级jQuery代码开发技巧 #### 1. 创建一个嵌套的过滤器 在jQuery中,可以通过链式调用来实现复杂的过滤效果。例如,`.filter(":not(:has(.selected))")` 这个表达式的含义是:从当前元素集合中筛选出不包含...

    jQuery攻略 源代码

    7. **性能优化**: 探讨如何编写高性能的jQuery代码,避免常见性能陷阱。 8. **兼容性问题**: 了解jQuery对不同浏览器的兼容策略,如何确保代码在多种环境下稳定运行。 9. **最佳实践**: 遵循官方推荐的编码规范和...

    李炎恢在线课堂jQuery讲义代码

    最后,讲义可能还会涉及性能优化技巧,例如减少DOM操作、利用事件委托、以及如何正确使用$(document).ready()和$(window).load()等,这些都是提高jQuery代码执行效率的关键。 总的来说,《李炎恢在线课堂jQuery讲义...

    jQuery常见开发技巧详细整理

    在jQuery的开发过程中,掌握一些常见技巧能显著提升开发效率和代码质量。下面是一些详细的jQuery开发...这些技巧在jQuery开发中非常实用,熟练掌握能有效提高代码质量和效率,让开发者编写出更加优雅的JavaScript代码。

    50个常见的JQUery代码

    jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了网页中的 DOM 操作、事件处理和动画效果。以下是一些关于 jQuery 的常见代码示例及其详细解释: 1. 修改默认编码:$.ajaxSetup() 函数用于设置所有 AJAX ...

    高效的jQuery代码编写技巧总结

    在编写高效的jQuery代码时,有几个关键点需要注意,以优化...通过遵循这些最佳实践,你可以显著提高jQuery代码的效率,从而创建出响应更快、性能更优的网页应用。记住,良好的代码组织和优化是提供卓越用户体验的关键。

    jQuery 常用代码段

    通过阅读“超实用的jQuery代码段.pdf”,你将能掌握这些基础和进阶技巧,而“超实用的jQuery代码段-源码.zip”可能包含可直接应用到项目中的实际代码示例。学习并理解这些代码段,对于提升你的前端开发技能大有裨益...

    12种jQuery代码性能优化方法.pdf

    通过这些优化技巧,开发者可以显著提高jQuery代码的执行效率,降低资源消耗,从而提供更流畅的网页应用体验。在实际项目中,结合代码审计工具和性能分析,持续优化代码,能够不断提升网站的性能表现。

    超实用的jQuery代码段

    超实用的jQuery代码段精选近350个jQuery代码段,涵盖页面开发中绝大多数要点、技巧与方法,堪称史上最实用的jQuery代码参考书,可以视为网页设计与网站建设人员的好帮手。《超实用的jQuery代码段》的代码跨平台、跨...

    dreamware jquery 代码提示

    Dreamware 作为开发工具,可能提供了对 jQuery 的集成支持,使得开发者在编写 jQuery 代码时能够获得智能提示,提高编码效率。 在描述中提到的 "NULL 博文链接:https://zenggang.iteye.com/blog/722280",暗示了一...

    高效的50个jquery代码块

    2. **元素存储与复用**:存储jQuery对象可以避免重复的DOM查询,提高性能。例如,`var allItems = $("div.item");`和`var keepList = $("div#container1 div.item");`将常用元素保存在变量中,后续操作直接使用这些...

    jquery使用技巧总结

    本文将深入探讨jQuery的使用技巧,帮助开发者提升效率,更好地驾驭这个强大的工具。 1. **选择器的高效运用** jQuery的选择器功能强大,能快速定位DOM元素。例如,`$("#id")`用于选取ID为指定值的元素,`$(".class...

    JQuery 游戏 俄罗斯方块 代码

    在开发过程中,为了优化性能,开发者可能使用了一些jQuery的优化技巧,比如使用ID选择器而不是类选择器,减少DOM操作的频率,以及使用事件委托来处理大量的事件绑定等。同时,代码结构的清晰性和可维护性也是衡量...

    jQuery网页开发实例精解源代码

    总之,《jQuery网页开发实例精解》的源代码是学习和实践jQuery的宝贵资源,通过实际操作这些示例,开发者可以深入理解jQuery的核心概念和技巧,从而在网页开发中更加得心应手。对于那些因为文件大小限制而未能直接...

    江哥带你玩转JQuery代码资料.zip

    《江哥带你玩转JQuery代码资料》是一个专注于讲解JQuery编程技巧和实践的资源集合,由知名前端开发者李南江(江哥)提供。这个压缩包包含了丰富的JQuery学习材料,旨在帮助初学者和进阶者提升在前端开发中的JQuery...

Global site tag (gtag.js) - Google Analytics