使用最新版本

因为新版本会改进性能,还有很多新功能

用对选择器

  • 最快的选择器: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

  1. 避免使用.getJson() 或 .get(),而是直接使用$.ajax()方法

  2. 不要使用http或https请求,宁愿选择无模式的URLs,从url中去掉http或https

  3. 不要在url中加参数,用data对象传递它们。

参考资料

阮一峰老师的博客


已注销
958 声望58 粉丝