首页 > 代码库 > jQuery性能优化
jQuery性能优化
1、使用最新版本的jQuery类库
jQuery每一个版本的更新都会进行一些Bug修复和一些优化,同时也会包含一些创新。但是,需要注意版本的兼容性,不要忘记测试你的代码。
2、使用合适的选择器
不同的选择器其性能也有差异,总的来说$("id")>$("p")>$(".class")>$("[attribute=value]")>$(":hidden")。
对于$(".class"),比较新的浏览器如IE9,它支持本地方法document.getElementByClassName(),而对于老的浏览器,如IE8及之前版本,只能靠使用DOM搜索方式来实现,这无疑对性能产生较大的影响,所以应该有选择性的使用。
注意:1、尽量使用ID选择器;2、尽量给选择器指定上下文。
3、缓存对象
有以下代码:
#("traffic_light input.on").bind("click",function(){...});#("#traffic_light input.on").css("border",1px dashed yellow");#("#traffic_light input.on").css("background-color",orange");#("traffic_light input.on").fadIn("slow");
jQuery会在创建每一个选择器的过程中,查找DOM,创建多个jQuery对象,下面是一个较优的写法:
var $active_light=#("traffic_light input.on");//缓存变量$active_light.bind("click",function(){...});$active_light.css("border",1px dashed yellow");$active_light.css("background-color",orange");$active_light.fadIn("slow");
当然如果使用链式方式将更加简洁。
永远不要让相同的选择器在你的代码里出现多次。
4、循环时的DOM操作
下面是一个循环添加DOM节点的例子,代码如下:
var top_100 list=[...],//假设这里是100个独一无二的字符串$mylist=$("#mylist");//jQuery选择到<ul>元素for(var i=0,l=top_100_list.length;i<1;i++){ $mylist.append("<li>"+top_100_list[i]+"</li>");}
以上代码,每一个新添加的标签元素都作为一个节点添加到窗口ID中,我们可以将整个元素字符串在插入DOM之前全部创建好,减少DOM操作。代码如下所示:
var top_100_list=[...],$mylist=$("#mylist"),top_100_li="";//这个变量将用来存储我们的列表元素for(var i=0,l=top_100_list.length;i<1;i++){ top_100_li+="<li>"+top_100_list[i]+"</li>";}$mylist.html(top_100_li);
5、数组方式使用jQuery对象
使用jQuery选择器获取结果是一个jQuery对象。然而,jQuery类库会让你感觉你正在使用一个定义了索引和长度的数组。在性能方面,建议使用简单for或者while循环来处理,而不是$.each(),这样代码将更快。
//each()方法$.each(array,function(i){ array[i]=i;}//for代替each()方法var array=new Array();for(var i=0;i<array.length;i++){ array[i]=i;}
6、事件代理
也即事件委托,利用事件冒泡机制,通过绑定父节点,来对事件进行监听。
//未使用事件代理$(‘myTable td‘).click(function(){ $(this).css(‘background‘,‘red‘);});//使用事件代理$(‘myTable‘).click(function(e){ var $clicked=$(e.target); //e.target 捕捉到触发的目标元素 $clicked.css(‘background‘,‘red‘);});
7、将你的代码转化成jQuery插件
插件可以使代码具有更好的重用性,并且能够有效的帮助你组织代码。创建一个插件代码如下:
;(function($){ $.fn.yourPluginName=function(){ //Your code goes here return this;})(jQuery);
8、使用join()来拼接字符串
通过创建一个数组,然后循环,最后使用join()把数组转化为字符串,而不是使用"+"会有助于优化性能,尤其是长字符串处理的时候。
var array=[];for(var i=0;i<=10000;i++){ array[i]=‘<li>‘+i+‘</li>‘;}$(‘#list‘).html(array.join(‘‘));
9、合理利用HTML5的Data属性
HTML5的data属性可以帮助我们插入数据,特别是前后端的数据交换。jQuery的data()方法,有效的利用HTML5的属性,来自动得到数据。下面是个例子:
<div id="dl" data-role="page" data-last-value="43" data-options=‘{"name":"John"}‘></div>
为了读取数据,你需要使用如下代码:
$("#dl").data("role"); //"page"$("#dl").data("lastValue"); //43$("#dl").data("option").name; //"John"
10、尽量使用原生的JavaScript方法
11、压缩JavaScript
jQuery性能优化