zoukankan      html  css  js  c++  java
  • JQuery 的优先级

    1.使用最新的jQuery版本

    2.用对选择器.
       2.1 jquery最快的选择器是ID选择器:来源于js的getElementById()方法

       注释:需要选择多个元素,必然涉及到Dom遍历和循环,为了提交性能,建议从最近的ID开始继承
       例如:<div id="div"><ul id="ul"><li class="on">1</li><li class="off">2</li></ul></div>  var ul=$("#ul")

        2.2 第二快的选择器是tag(标签)选择器,它是来自原生getElementsByTagName()方法
        如上例子:var light=$("#ul input.on")
        
        2.3 较慢的选择器 class 选择器
        $('.className')的性能,取决于不同的浏览器 moz webkit safari o 浏览器都有原生方法:getElementByClassName()所以速度并不慢
        但是IE5-IE8都没有会相当慢

        2.4 最慢的选择器:伪类选择器和属性选择器:原因:因为没有针对他们的原生方法,但是一些新的浏览器版本有:queryselector()和        

    queryselectorAll()放来提高性能
         伪类选择器:$(':hidden')
         属性选择器:$('attribute=value')  attribute:属性名:id、name、class... value 值   例如:id='ss'
    3.理解子元素和父元素的关系
       var list=$("#list");
      【1.$('.child', $parent)2.$parent.find('.child')3.$parent.children('.child')4.$('#parent > .child')5.$('#parent .child')6.       

      $('.child', $('#parent'))】
       语句:  $('.child', $parent)
       解释:这条语句的意思是,给定一个DOM对象,然后从中选择一个子元素。jQuery会自动把这条语句转成$.parent.find('child'),这会导致一定 

             的性能损失。它比最快的形式慢了5%-10%。
       转化:$('.child',$('.ss').parent)=$('.child', $parent)[.child与.ss是同级]
         $('.child', $parent)=$('.child', list)
       
       语句:$parent.find('.child')
       解释:这条是最快的语句。.find()方法会调用浏览器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速  

           度较快。
       转化: $parent.find('.child')=  $(list).find('.test');

       语句:$parent.children('.child')
       解释:这条语句在jQuery内部,会使用$.sibling()和javascript的nextSibling()方法,一个个遍历节点。它比最快的形式大约慢50%。
       转化: $parent.children('.child') =$test = $(list).children('.test');

       语句:$('#parent > .child')
       解释:jQuery内部使用Sizzle引擎,处理各种选择器。Sizzle引擎的选择顺序是从右到左,所以这条语句是先选.child,然后再一个个过滤出父  

           元素#parent,这导致它比最快的形式大约慢70%。
       转化:$('#parent > .child')=var $test = $('#list > .test');

       语句:$('#parent .child')
       解释:这条语句与上一条是同样的情况。但是,(上一条只选择直接的子元素,这一条可以于选择多级子元素),所以它的速度更慢,大概比最

    快的         形式慢了77%。
       转化:var $test = $('#list .test'); 

       语句:$('.child', $('#parent'))
       解释;jQuery内部会将这条语句转成$('#parent').find('.child'),比最快的形式慢了23%。
       转化:var $test = $('#list').find('.test');
    总结:除了优先级后,很重要的一个原因是是否 缓存了。
          同时,多级和chidren的使用也会有导致很大的影响

    4.不要过度的使用jQuery
      最简单的语句 js至少比$(快10多倍)

    5.做好缓存(很重要)
       var cached=jQuery('#top')
       根据测试,缓存比不缓存快了2-3倍
          5.1.将jQuery对象缓存起来:永远不要让相同的选择器在你的代码里出现多次
          错误的写法:
          例如:$("#traffic_light input.on").bind("click", function(){ ... });
          $("#traffic_light input.on").css("border", "1px dashed yellow");
          正确的写法:
          例如:var $active_light = $("#traffic_light input.on");
          $active_light.bind("click", function(){ ... });
          $active_light.css("border", "1px dashed yellow"); 
          更高效的写法,链式写法
          $active_light.bind("click", function(){ ... }).css("border", "1px dashed yellow") 
          如果打算在其他函数中使用Jquery对象,则必须把它们缓存到全局环境中
          例如:window.$my={window.$my = {  head : $("head"),  traffic_light : $("#traffic_light"),  traffic_button :                  

      $("#traffic_button")  };  function do_something(){  }
                当在函数内部时,可以继续将查询存入到全局对象中去$my.cool_results = $("#some_ul li");  
                将全局函数作为一个普通的jq对象去使用
                $my.other_results.css("border-color", "red");


    6.使用链式写法
      $('div').find('h3').eq(2).html('Hello'); 
      采用链式写法时,jQuery自动缓存每一步的结果,因此比非链式写法要快。根据测试,链式写法比(不使用缓存的)非链式写法,大约快了25%。

    7.事件的委托处理(冒泡)
      初级:每个每个格子绑定一个点击事件
      $("td").on("click", function(){
          alert(“司法所地方”)
       });
      初级优化:原理:这个事件只需要在父元素绑定1次即可,而不需要在子元素上绑定100次,从而大大提高性能。这就叫事件的”委托处理”,也就 

                     是子元素”委托”父元素处理这个事件
      $(“table”).delegate(“td”, “click”, function(){
           alert("斯蒂芬森飞洒")
       });
      更好的写法,则是把事件绑定在document对象上面。
      $(document).on("click", "td", function(){ $(this).toggleClass("click"); });document=指定的id或class

    8.少改动DOM结构
      (1)改动DOM结构开销很大,因此不要频繁使用.append()、.insertBefore()和.insetAfter()这样的方法。
        如果要插入多个元素,就先把它们合并,然后再一次性插入。根据测试,合并插入比不合并插入,快了将近10倍。
      (2)如果你要对一个DOM元素进行大量处理,应该先用.detach()方法,把这个元素从DOM中取出来,处理完毕以后,再重新插回文档。根据测试, 

       使用.detach()方法比不使用时,快了60%。
      (3)如果你要在DOM元素上储存数据,不要写成下面这样:
        var elem = $(‘#elem');
        elem.data(key,value);

    9.正确处理循环
      循环总是一种比较耗时的操作,如果可以使用复杂的选择器直接选中元素,就不要使用循环,去一个个辨认元素。
      javascript原生循环方法for和while,要比jQuery的.each()方法快,应该优先使用原生方法。


    网站:http://www.jb51.net/article/25530.htm
          http://caibaojian.com/jquery-performance-optimization.html
          http://www.2cto.com/kf/201308/238441.html

  • 相关阅读:
    KlayGE 4.0功能规划
    Kinect for Windows SDK发布
    CENTOS下用syslogng集中管理日志并压缩保存
    Eclipse+Plugin
    struts2 获取request、session的方法
    ActiveMQ使用经验
    springmock + dbutil 用来测试数据库操作
    英语学习
    如何查看eclipse版本
    jQuery插件的开发
  • 原文地址:https://www.cnblogs.com/zmztya/p/11236221.html
Copyright © 2011-2022 走看看