使用最新版本
因为新版本会改进性能,还有很多新功能
用对选择器
最快的选择器:id选择器和元素标签选择器
原因:遇到这些选择器的时候,jQuery内部会自动调用浏览器的原生方法(比如getElementById()),所以它们的执行速度快较慢的选择器:class选择器
$('.className')
的性能,取决于不同的浏览器。Firefox、Safari、Chrome、Opera浏览器,都有原生方法getElementByClassName(),所以速度并不慢。但是,IE5-IE8都没有部署这个方法,所以这个选择器在IE中会相当慢。
最慢的选择器:伪类选择器和属性选择器
原因:浏览器没有针对的原生方法优化点
给选择器指定上下文$('.class');//慢的,需要遍历整个dom去查找.class $('.class', '#class-container');//快的,因为它仅在class-container元素下查找
最快的查找子元素方法
$parent.find('.child')
这条是最快的语句。.find()方法会调用浏览器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度较快。
对比:
$('#parent > .child')
jQuery内部使用Sizzle引擎,处理各种选择器。Sizzle引擎的选择顺序是从右到左,所以这条语句是先选.child,然后再一个个过滤出父元素#parent,这导致它比最快的形式大约慢70%。
$('#parent .child')
这条语句与上一条是同样的情况。但是,上一条只选择直接的子元素,这一条可以于选择多级子元素,所以它的速度更慢,大概比最快的形式慢了77%。
有原生方法可以使用的场合,尽量避免使用jQuery
做好缓存
使用链式写法
事件的委托处理(Event Delegation)
少改动DOM结构
如果要插入多个元素,就先把它们合并,然后再一次性插入
// 更好的,array.join(”)如果你要对一个DOM元素进行大量处理,应该先用.detach()方法,把这个元素从DOM中取出来,处理完毕以后,再重新插回文档
如果你要在DOM元素上储存数据,不要写成下面这样:
var elem = $('#elem'); elem.data(key,value);
而要写成
var elem = $('#elem'); $.data(elem[0],key,value);
根据测试,后一种写法要比前一种写法,快了将近10倍。因为
elem.data()
方法是定义在jQuery函数的prototype对象上面的,而$.data()
方法是定义jQuery函数上面的,调用的时候不从复杂的jQuery对象上调用,所以速度快得多。(此处可以参阅下面第10点。)插入html代码的时候,使用浏览器原生的innerHTML
正确处理循环
javascript原生循环方法for和while,要比jQuery的.each()方法快,应该优先使用原生方法。
AJAX
避免使用.getJson() 或 .get(),而是直接使用$.ajax()方法
不要使用http或https请求,宁愿选择无模式的URLs,从url中去掉http或https
不要在url中加参数,用data对象传递它们。