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 相关文章推荐
jQuery asp.net 用json格式返回自定义对象
Apr 07 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
Javascript Ajax异步读取RSS文档具体实现
Dec 12 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
Visual Studio中js调试的方法图解
Jun 30 Javascript
javascript文本模板用法实例
Jul 31 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
详解Vue整合axios的实例代码
Jun 21 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 jQuery
element el-tree组件的动态加载、新增、更新节点的实现
Feb 27 Javascript
解决vue2中使用elementUi打包报错的问题
Sep 22 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
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
PHP 文件上传功能实现代码
2009/06/24 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
php使用session二维数组实例
2014/11/06 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
基于vue配置axios的方法步骤
2017/11/09 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python实现子类调用父类的方法
2014/11/10 Python
Python操作CouchDB数据库简单示例
2015/03/10 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python补齐字符串长度的实例
2018/11/15 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
高一化学教学反思
2014/02/05 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
党组织结对共建协议书
2016/03/23 职场文书
教你怎么用Python操作MySql数据库
2021/05/31 Python