优化jquery代码
写jquery代码时应该注意:
1.定义jQuery变量的时候添加var关键字,可能不加上var,直接$div = $("#div")的话开始不会出现什么问题,但后面一旦出现bug会让你晕死啊!!!
2.不要给每个变量都添加var,你非要var test = "";var $div = $("#div");var $body = $("body");你是有强迫症吗。var test = "",$div = $("#div"),$body = $("body");就好啦。
3.进行dom操作时,请有效地缓存变量内容
$("#testStr").html("设置元素的内容"); $("#testStr").hide(); /*这里注意你每次定义并且调用$('#loading')的时候,都实际创建了一个新的变量,如果你需要重用的话,记住一定要定义到一个变量里,这样可以有效的缓存变量内容,如下:*/ var $text = $("#testStr"); $text.html("设置元素的内容").hide();
4.尽量把一些代码整合到一起
//不要这样 $button.click(function(){ $target.css('width','50%'); $target.css('border','1px solid #202020'); $target.css('color','#fff'); }); //可以这样 $button.click(function(){ $target.css({'width':'50%','border':'1px solid #202020','color':'#fff'}); });
5.避免使用全局类型的选择器
比如:不要 $('.something > *');
应该 $('.something').children();
6.不要叠加多个ID
比如:不要 $('#something #children');
应该 $('#children');
7.多用逻辑判断||或者&&来提速
比如:不要
if(!$something) {
$something = $('#something ');
}
应该:
$something= $something|| $('#something');
8.尽量使用 .on方法
9.尽量使用最新版本的jQuery
10.选择器使用优先级:#id > tag > class
一、正确引用jQuery
1.尽量在body结束前才引入jQuery,而不是在head中。
2.如果在</body>前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载完毕了。
<body> <script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="jquery1.8.min.js">\x3C/script>')</script> </body>
二、优化jQuery选择器
高效正确的使用jQuery选择器是熟练使用jQuery的基础,而掌握jQuery选择器需要一定的时间积累,我们开始学习jQuery时就应该注意选择器的使用。
<div id="nav" class="nav"> <a class="home" href="http://www.cnblogs.com/liuyan5258/">刘牛牛</a> <a class="articles" href="http://www.cnblogs.com/liuyan5258/p/4064841.html">优化jquery代码</a> </div>
如果我们选择class为home的a元素时,可以使用下边代码:
$('.home'); //1 $('#nav a.home'); //2 $('#nav').find('a.home'); //3
1.方法1会使jQuery在整个DOM中查找class为home的a元素,性能可想而知。
2.方法2为要查找的元素添加了上下文,在这里变为查找id为nav的子元素,查找性能得到了很大提升。
3.方法3使用了find方法,它的速度更快,所以方法三最好。
关于jQuery选择器的性能优先级,ID选择器快于元素选择器,元素选择器快于class选择器。因为ID选择器和元素选择器是原生的JavaScript操作,而类选择器不是,大家顺便可以看下find context 区别,find() children区别。
三、缓存jQuery对象
缓存jQuery对象可以减少不必要的DOM查找,关于这点大家可以参考下缓存jQuery对象来提高性能。(这里有点模糊,记下,花点时间搞清楚)
四、正确使用事件委托
事件委托可以使事件更好的执行,在动态添加的元素上绑定事件也需要委托来实现,在新版本的jQuery中推荐大家使用on来给元素绑定一个或多个事件的处理函数。
<table id="t"> <tr> <td>我是单元格</td> </tr> </table>
比如我们要在上边的单元格上绑定一个单击事件,不注意的朋友可能随手写成下边的样子:
$('#t').find('td').on('click', function () { $(this).css({ 'color': 'red', 'background': 'yellow' }); });
这样会为每个td绑上事件,在为100个单元格绑定click事件的测试中,两者性能相差7倍之多,好的做法应该是下边写法:
$('#t').on('click', 'td', function () { $(this).css({ 'color': 'red', 'background': 'yellow' }); });
五、精简jQuery代码
六、减少DOM操作
刚开始使用jQuery时可能会频繁的操作DOM(ps:这是在说我吗,恩。我已经改了。),这是相当耗费性能的。如我们要在body中动态输出一个表格,一些朋友会这样写:
var $t = $('body'); $t.append('<table>'); $t.append('<tr><td>1</td></tr>'); $t.append('</table>');
好的做法是这样:
$('body').append('<table><tr><td>1</td></tr></table>');