本文将从最多见的三个方面,来讨论jquery优化:
一、从选择器方面优化:
Jquery选择器的原理其实是基于js的选择器(getElementByXXXX)等等。所以我们很容易就能知道,不同选择器的选择速度。
像js有方法这种getElementById、getElementByTagName速度会很快。也就是如果代码里$(“#xxx”)、$(“input”)的速度会快于类名选择器$(“.xxx”)。其中id选择器的速度是最快的。
因为类名不唯一,所以jquery在实现类名选择器的时候,是通过遍历dom树的方法实现的。所以可想而知,类名选择器的速度。
我们要优化我们的代码,就可以从以下几个方面来优化:
1、 优先使用id选择器、tag选择器。
2、 在使用类名选择器的时候,提供一个范围比如:
var selectedItem = $('.listItem', $('.myList'));
这样他就不用再所有的dom树里面循环找该类名的元素了。
3、 可以定义自己的选择器,只要在代码里写:
$.extend($.expr[':'], { over100pixels: function(a) { return $(a).height() > 100; } });
这样你就可以使用自己定义的选择器了
$('.box:over100pixels').click(function() { alert('The element you clicked is over 100 pixels high'); });
4、 在有代码重复使用同样的选择器的时候,使用变量代替
for(var i=0;i<100;i++){
$(“.sd”).css(“height”,”1px”);
}
变成
var $dom=$(“.sd”);
for(var i=0;i<100;i++){
$dom.css(“height”,”1px”);
}
效率会提高很多
5、当有同一个元素的多种操作的时候不用分开写,可以使用方法连。
$('#mypanel') .find('TABLE .firstCol') .removeClass('.firstCol') .css('background' : 'red') .append('This cell is now red');
这样就避免了,多语句再多次选择元素。
6、 总是使用最新的jquery版本,每一次的新版本,都会对选择器的性能做优化。所以用新版本的jquery会让代码性能提升一点。
二、从dom操作方面优化:
像我们经常用的dom插入的操作,如.append(),.prepend(),.after(),.wrap(),等使用起来是相当耗时的。
尤其是当重复操作的时候。但是也是经常重复使用的。当我们获得了数组数据的时候经常要遍历,去拼页面上的dom。
那么这样就出现了选择:
你可以:
$.each(response.data,function(index,item){
$(“.aaa”).append(“”+item+” ”);
});
但根据我们上面讨论过的优化手段可以做两点优化:
第一$(“.aaa”)选择器可以提出来,第二append()操作,可以等到循环完在操作。
var $dom=$(“.aaa”);
var str=””;
$.each(response.data,function(index,item){
str+=“”+item+” ”;
});
$dom.append(str);
上面也可以用数组来攒字符串。
三、从事件绑定方面优化:
绑定事件是一件再通用不过的的操作。
需要注意的时候是,当我们绑定一个类的事件,同类名的dom可能非常多。但是我们习惯写的绑定事件。
$('.kkk ').click(function(){ $(this).css('background', 'red'); });
这种写法可能会让有多少个kkk类名的元素就会绑定多少个事件。那么这种情况下该怎么优化呢:
$('#myTable').click(function(e) { var clicked = $(e.target); clicked.css('background', 'red'); });
这样不管kkk类名的dom有几个都只绑定一个事件。这叫做事件代理。
除了这些优秀的jquery代码优化方法,其实还有很多可以改善页面加载速度的方法。养成良好的代码习惯,是一名优秀程序员的基本功,只有每一步都走的优秀,才能走的更快、更稳。