当前位置: 首页 > 图文教程 > 网络编程 > Javascript > jQuery 性能优化指南(3)

Javascript
JavaScript 基础问答一
CSS JavaScript 实现菜单功能 改进版
JavaScript 图片切割效果(放大镜)
JavaScript 拖放效果代码
漂亮的js tab图片轮换效果代码(可自定义的幻灯片和图片缓冲切换)
鼠标滑过 放大显示效果的列表
JS 相册效果 自动播放[本地整合]
仿CSDN 右下角悬挂的浮动层效果
右下角广告(点击广告后出现关闭按钮可关闭)
javascript this用法小结
JavaScript 绘图代码
JavaScript CSS菜单功能 改进版
javascript jQuery插件练习
jQuery 浮动广告实现代码
jQuery 位置插件
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
jquery 图片预加载 自动等比例缩放插件
JavaScript 仿关机效果的图片层
javascript 对表格的行和列都能加亮显示
JavaScript Select和Option列表元素上下左右移动

Javascript 中的 jQuery 性能优化指南(3)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 170 ::
收藏到网摘: n/a

前面性能优化已经说过,ID选择器的速度是最快的。所以在HTML代码中,能使用ID的尽量使用ID来代替class。
8,尽量使用ID代替Class。

前面性能优化已经说过,ID选择器的速度是最快的。所以在HTML代码中,能使用ID的尽量使用ID来代替class。
看下面的一个例子:

// 创建一个list
var $myList = $('#myList');
var myListItems = '<ul>';
for (i = 0; i < 1000; i++) {
myListItems += '<li class="listItem' + i + '">This is a list item</li>'; //这里使用的是class
}
myListItems += '</ul>';
$myList.html(myListItems);
// 选择每一个 li
for (i = 0; i < 1000; i++) {
var selectedItem = $('.listItem' + i);
}

在代码最后,选择每个li的过程中,总共用了5066毫秒,超过5秒了。

接着我们做一个对比,用ID代替class:

// 创建一个list
var $myList = $('#myList');
var myListItems = '<ul>';
for (i = 0; i < 1000; i++) {
myListItems += '<li id="listItem' + i + '">This is a list item</li>'; //这里使用的是id
}
myListItems += '</ul>';
$myList.html(myListItems);
// 选择每一个 li
for (i = 0; i < 1000; i++) {
var selectedItem = $('#listItem' + i);
}

在上段代码中,选择每个li总共只用了61毫秒,相比class的方式,将近快了100倍。

9,给选择器一个上下文

jQuery选择器中有一个这样的选择器,它能指定上下文。
jQuery( expression, context );

通过它,能缩小选择器在DOM中搜索的范围,达到节省时间,提高效率。
普通方式:
$('.myDiv')
改进方式:
$('.myDiv' , $("#listItem") )

10,慎用 .live()方法(应该说尽量不要使用)

这是jQuery1.3.1版本之后增加的方法,这个方法的功能就是为 新增的DOM元素 动态绑定事件。
但对于效率来说,这个方法比较占用资源。所以请尽量不要使用它。
例如有这么一段代码:

<script type="text/javascript" >
$(function(){
$("p").click(function(){
alert( $(this).text() );
});
$("button").click(function(){
$("<p>this is second p</p>").appendTo("body");
});
}) </script>
<body>
<p>this is first p</p> <button>add</button>
</body>

运行后,你会发现 新增 的 p元素,并没用被绑定click事件。

你可以改成.live("click")方式解决此问题,代码如下:

$(function(){
$("p").live("click",function(){ //改成live方式
alert( $(this).text() );
});
$("button").click(function(){ $("<p>this is second p</p>").appendTo("body"); });})

但我并不建议大家这么做,我想用另一种方式去解决这个问题,代码如下:

$(function(){
$("p").click(function(){
alert( $(this).text() );
});
$("button").click(function(){
$("<p>this is second p</p>").click(function(){ //为新增的元素重新绑定一次
alert( $(this).text() );
}).appendTo("body");
});
})

虽然我把绑定事件重新写了一次,代码多了点,但这种方式的效率明显高于live()方式,
特别是在频繁的DOM操作中,这点非常明显。


11,子选择器和后代选择器

后代选择器经常用到,比如:$("#list p");
后代选择器获取的是元素内部所有元素。

而有时候实际只要获取 子元素,那么就不应该使用后代选择器。
应该使用子选择器,代码如下:
$("#list > p");

12,使用data()方法存储临时变量

下面是一段非常简单的代码,

$(function(){

var flag = false;

$("button").click(function(){

if(flag){

$("p").text("true");

flag=false;

}else{

$("p").text("false");

flag=true;

}

});

})

改用data()方式后,代码如下:

$(function(){

$("button").click(function(){

if( $("p").data("flag") ){

$("p").text("true");

$("p").data("flag",false);

}else{

$("p").text("false");

$("p").data("flag",true);

}

});

})


jQuery性能优化指南(3)到此结束。
相信你也有你的idea,请共享出来吧。 Email : [email protected]