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注意img图片的onerror事件的分析
Jan 01 Javascript
JavaScript三元运算符的多种使用技巧
Apr 16 Javascript
javascript清空table表格的方法
May 14 Javascript
javascript的BOM汇总
Jul 16 Javascript
JavaScript必知必会(二) null 和undefined
Jun 08 Javascript
用js读写cookie的简单方法(推荐)
Aug 08 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
Jul 04 Javascript
vue-cli的工程模板与构建工具详解
Sep 27 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 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过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
javascript中检测变量的类型的代码
2010/12/28 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
园林技术个人的自我评价
2014/01/08 职场文书
年终考核评语
2014/01/19 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
国培远程培训感言
2014/03/08 职场文书
白酒营销策划方案
2014/08/17 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
2014年路政工作总结
2014/12/10 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
教师创先争优承诺书
2015/04/27 职场文书
领导干部学习心得体会
2016/01/23 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers