JQuery Tips(4) 一些关于提高JQuery性能的Tips


Posted in Javascript onDecember 19, 2009

在选择时,最好以ID选择符作为开头

我想这个很好理解,因为JQuery内部使用document.getElementByID方法进行ID选择,这种方法比其他所有对DOM选择的方法更快,所以以$("#")开头是最好的,比如:

<div id="a"> 
<div class="b"> 
<div class="c"> 
<div class="d"></div> 
</div> 
</div> 
</div> 
<script type="text/javascript"> 
$(".b .c .d")//slow one 
$("#a .b .c .d")//fast one 
</script>

提供$()的上下文
在使用$()选择页面元素时,提供选择的范围可以减少选择的时间,换句话说,让选择器只在页面的一小片范围内筛选而不是整个页面当然会减少筛选时间,通过在$()函数内提供第二个参数作为上下文可以实现这一点
<div id="test"> 
<div class="inner">hi</div> 
</div> 
<script type="text/javascript"> 
alert($(".inner", document.getElementById("test")).text());//increase the speed by provide context 
alert($(".inner").text());//traverse all the element so that is slower than above 
</script>

当然,在jquery定义(或者js函数)事件内,可以通过this来指代上下文:
<div id="test"> 
<div class="inner">hi</div> 
</div> 
<script type="text/javascript"> 
$("#test").click(function() { 
var text = $(".inner", this).text(); //this means $("#test") 
alert(text);//alert hi 
}); 
</script>

当然,上面的例子也可以写成下面两种方式:
<div id="test"> 
<div class="inner">hi</div> 
</div> 
<script type="text/javascript"> 
alert($("#test .inner").text()); //method 1 
alert($("#test").find(".inner").text());//method 2 and it was best one 
</script>

其中利用find方法是所有方法中效率最高的

当然,如果你是通过id选择符,也就是$("#..")来选择,不需要提供上下文参数.这对速度没有影响

将经常用的JQuery包装好的元素进行保存
如题,这点比较重要,因为使用$()对页面元素进行选择是需要耗费时间的.而保存为变量进行使用时,可以避免这种浪费,比如:

<ul> 
<li>one</li> 
<li>two</li> 
<li>three</li> 
<li>four</li> 
<li>five</li> 
</ul> 
<script type="text/javascript"> 
for (i = 0; i < $("ul li").length; i++) {//very bad,select $("ul li") so many times,waste a lot of time 
alert($("ul li")[i].innerHTML);//same here,very bad 
} 
var $li = $("ul li"); 
for (i = 0; i < $li.length; i++) {//good one,only selct $("ul li") once 
alert($li[i].innerHTML); //same here,good 
} 
</script>

从代码可以看到,避免多次重复选择可以提高性能:-)

尽量少用选择符
JQuery的选择器是面向数组的,所以在条件允许的情况下尽量少用选择器,比如:

<div id="Div0"></div> 
<div id="Div1"></div> 
<div id="Div2"></div> 
<script type="text/javascript"> 
$("#Div0").slideDown("slow"); 
$("#Div1").slideDown("slow"); 
$("#Div2").slideDown("slow");//slow $("Div0,Div1,Div2").slideDown("slow");//fast 
</script>

可以看出,使用选择器并用逗号将被选择的元素分开,并选择多个元素不仅让代码更加简洁,并且通过减少创建JQuery的实例所以在性能上也稍胜一筹!

在循环次数很多时避免使用$().each,而使用for循环
使用$().each方法让在进行循环时,会让编程更加轻松,少量的循环在使用$().each时对性能的影响可以忽略不计,但是当这个数字很大的时候,对性能的影响便开始变得可观了.

这个数字,我查了下资料,据说是1000以下可以使用$().each方法,而这个数字如果继续增加,则应该使用for循环语句。

尽量减少对DOM的操作
在页面中对DOM操作是比较消耗的(比如在页面插入或删除一段文字),把这个改动降至最小是保持性能的最佳实践!比如:

<ul id="test"> 
</ul> 
<script type="text/javascript"> 
var $list = $("#test"); 
for (i = 1; i < 101; i++) { 
$list.append("<li>Item" + i + "</li>"); 
} //very bad,change dom 100 times var listItem = ""; 
for (j = 1; j < 101; j++) { 
listItem += "<li>Item" + j + "</li>"; 
} 
$list.html(listItem); 
//good practice,only modify dom once 
</script>

可以看出,第一个例子对DOM修改100次,而第二个只对DOM修改1次,这上面的性能差距是显而易见的。

可以屏蔽JQuery的动画效果
在某些情况下,如果,可以关闭JQuery动画,能对性能进行一定提升,屏蔽的方法是:

<script type="text/javascript"> 
jQuery.fx.off = true; 
</script>

如果参数可以是JS对象,尽量使用对象
很对JQuery插件,或者JQuery的css和attr方法都接受键/值 或 js键/值对象 对作为参数,传递键值对象可以减少JQuery对象的创建,比如:
<div></div> 
<script type="text/javascript"> 
$("div").css("display", "block"); 
$("div").css("background-color", "blue") 
//slow,because it create more Jquery object $("div").css({ "display": "block", "background-color": "blue" }); 
//fast,only create one object 
</script>

当然也可以使用连缀的方式:
<div></div> 
<script type="text/javascript"> 
$("div").css("display", "block").css("background-color", "blue"); </script>

但是这种方式的性能不如上面那种.需要使用两个方法,并且需要多生成临时对象.

以上都是一些对JQuery性能提升的小Tips

Javascript 相关文章推荐
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 Javascript
javascript中Date对象的getDay方法使用指南
Dec 22 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
Jul 10 Javascript
JavaScript中定义类的方式详解
Jan 07 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
js每隔两秒输出数组中的一项(实例)
May 28 Javascript
JS中Promise函数then的奥秘探究
Jul 30 Javascript
浅析Vue实例以及生命周期
Aug 14 Javascript
用POSTMAN发送JSON格式的POST请求示例
Sep 04 Javascript
Layui table field初始化加载时进行隐藏的方法
Sep 19 Javascript
js实现弹幕飞机效果
Aug 27 Javascript
JS 的应用开发初探(mootools)
Dec 19 #Javascript
用js实现层随着内容大小动态渐变改变 推荐
Dec 19 #Javascript
javascript demo 基本技巧
Dec 18 #Javascript
IE和Firefox下event事件杂谈
Dec 18 #Javascript
替代window.event.srcElement效果的可兼容性的函数
Dec 18 #Javascript
JavaScript 序列化对象实现代码
Dec 18 #Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 #Javascript
You might like
PHP parse_url 一个好用的函数
2009/10/03 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
JavaScript 不只是脚本
2007/05/30 Javascript
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
高中自我评价分享
2013/12/05 职场文书
安全技术说明书
2014/05/09 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
北京故宫的导游词
2015/01/31 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android