jquery最佳实践笔记

使用最新版本

由于新版本会改进性能,还有不少新功能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%。

有原生方法可使用的场合,尽可能避免使用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对象传递它们。

参考资料

阮一峰老师的博客

相关文章
相关标签/搜索