JQuery性能优化

1,总是从ID选择器开始继承
这条原则就是有id尽量选id。
2,在class前使用tag(标签名)

var active_light = $(”#traffic_light input.on”);
3,将jQuery对象缓存起来
var $active_light = $(”#traffic_light input.on”);
$active_light.bind(”click”, function(){ … });
4,对直接的DOM操作进行限制
for (var i=0, l=top_100_list.length; i<l; i++){
   top_100_li += “<li>” + top_100_list[i] + “</li>”;
}
$mylist.html(top_100_li);
原则就是先拼出所有的HTML,再插入DOM。
5,冒泡
除非在特殊情况下, 否则每一个js事件(例如:click, mouseover等.)都会冒泡到父级节点。

$(”#entryform input”).bind(”focus”, function(){
    $(this).addClass(”selected”);
}).bind(”blur”, function(){
    $(this).removeClass(”selected”);
});
改进成
$(”#entryform”).bind(”focus”, function(e){
    var $cell = $(e.target); // e.target 捕捉到触发的目标元素
    $cell.addClass(”selected”);
}).bind(”blur”, function(e){
    var $cell = $(e.target);
    $cell.removeClass(”selected”);
});
同理,
$(’#myTable td’).click(function(){
    $(this).css(’background’, ‘red’);
});
 改进方式:

$(’#myTable’).click(function(e) {

     var $clicked = $(e.target);

     $clicked.css(’background’, ‘red’);

});

在改进方式中,你只为一个元素绑定了1个事件

6,推迟到 $(window).load 

$(document).ready可以在页面渲染时,其它元素还没下载完成就执行。

$(window).load在所有的html(包括<iframe>)被下载完成后执行
$(window).load(function(){
    // 页面完全载入后才初始化的jQuery函数.
});
一些特效的功能,例如拖放, 视觉特效和动画, 预载入隐藏图像等等,都是适合这种技术的场合。

 7,压缩JavaScript

在线压缩地址: http://dean.edwards.name/packer/
8,尽量使用ID代替Class
ID选择器的速度是最快的。所以在HTML代码中,能使用ID的尽量使用ID来代替class。
9,给选择器一个上下文

jQuery选择器中有一个这样的选择器,它能指定上下文。
jQuery( expression, context );
通过它,能缩小选择器在DOM中搜索的范围,达到节省时间,提高效率。
普通方式:
$(’.myDiv’)
改进方式:
$(’.myDiv’ , $(”#listItem”) )

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

这个方法比较占用资源。所以请尽量不要使用它。
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);

        }

    });

})

摘自http://blog.guojie1984.cn/?p=88

原文地址:https://www.cnblogs.com/webfpc/p/1575093.html