jQuery 性能优化指南(3)


Posted in Javascript onMay 21, 2009
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 : cssrain@gmail.com
 
Javascript 相关文章推荐
js资料toString 方法
Mar 13 Javascript
jQuery中调用WebService方法小结
Mar 28 Javascript
JS实现时间格式化的方式汇总
Oct 16 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
Mar 25 Javascript
深入浅出分析javaScript中this用法
May 09 Javascript
JavaScript中Object.prototype.toString方法的原理
Feb 24 Javascript
深入理解JQuery中的事件与动画
May 18 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
Oct 26 Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
Jun 24 Javascript
jQuery 性能优化指南(2)
May 21 #Javascript
jQuery 性能优化指南 (1)
May 21 #Javascript
javascript操作cookie_获取与修改代码
May 21 #Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 #Javascript
Javascript 的addEventListener()及attachEvent()区别分析
May 21 #Javascript
W3C Group的JavaScript1.8 新特性介绍
May 19 #Javascript
JS backgroundImage控制
May 19 #Javascript
You might like
php记录日志的实现代码
2011/08/08 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
php图片裁剪函数
2018/10/31 PHP
javascript静态的url如何传递
2007/05/03 Javascript
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
BootStrap中
2016/12/10 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
python模块之re正则表达式详解
2017/02/03 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python nmap实现端口扫描器教程
2020/05/28 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
会计与审计专业大专生求职信
2013/10/03 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
教研活动总结
2014/04/28 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python