由于新版本会改进性能,还有不少新功能javascript
最快的选择器:id选择器和元素标签选择器
缘由:遇到这些选择器的时候,jQuery内部会自动调用浏览器的原生方法(好比getElementById()),因此它们的执行速度快html
较慢的选择器:class选择器$('.className')
的性能,取决于不一样的浏览器。java
Firefox、Safari、Chrome、Opera浏览器,都有原生方法getElementByClassName(),因此速度并不慢。可是,IE5-IE8都没有部署这个方法,因此这个选择器在IE中会至关慢。
最慢的选择器:伪类选择器和属性选择器
缘由:浏览器没有针对的原生方法jquery
优化点
给选择器指定上下文ajax
$('.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')
dom
这条语句与上一条是一样的状况。可是,上一条只选择直接的子元素,这一条能够于选择多级子元素,因此它的速度更慢,大概比最快的形式慢了77%。
若是要插入多个元素,就先把它们合并,而后再一次性插入
// 更好的,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()方法快,应该优先使用原生方法。
避免使用.getJson() 或 .get(),而是直接使用$.ajax()方法
不要使用http或https请求,宁愿选择无模式的URLs,从url中去掉http或https
不要在url中加参数,用data对象传递它们。