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实现ASP分页函数 HTML分页函数
Sep 22 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 Javascript
JQuery动态创建DOM、表单元素的实现代码
Aug 09 Javascript
js日期联动示例
May 02 Javascript
删除javascript中注释语句的正则表达式
Jun 11 Javascript
jQuery 弹出层插件(推荐)
May 24 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
javaScript产生随机数的用法小结
Apr 21 Javascript
layui 实现table翻页滚动条位置保持不变的例子
Sep 05 Javascript
原生js实现商品筛选功能
Oct 28 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
关于PHP5 Session生命周期介绍
2010/03/02 PHP
PHP PDO函数库详解
2010/04/27 PHP
php获取apk包信息的方法
2014/08/15 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
php批量修改表结构实例
2017/05/24 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
详解angular element()方法使用
2017/04/08 Javascript
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
python发送邮件实例分享
2017/07/28 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
python 美化输出信息的实例
2018/10/15 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python环境下安装opencv库的方法
2020/03/05 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
质量工程师岗位职责
2013/11/16 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
岗位职责范本大全
2015/02/26 职场文书
司机岗位职责范本
2015/04/10 职场文书
聚会通知怎么写
2015/04/23 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫