Jquery优化效率 提升性能解决方案(3)

  通过在父级监听获取焦点和失去焦点的事件,对目标元素进行操作。在上面代码中,父级元素扮演了一个调度员的角色,它可以基于目标元素绑定事件。如果你发现你给很多元素绑定了同一个事件监听,那么现在的你肯定知道哪里做错了。同理,在Table操作时,我们也可以使用这种方式加以改进代码:普通的方式:

以下是引用片段:
$('#myTable td').click(function(){ 
     $(this).css('background', 'red');  });
 

  改进方式:  

以下是引用片段:
$('#myTable').click(function(e) {
   var $clicked = $(e.target);
   $clicked.css('background', 'red');   });
 

  假设有100个td,在使用普通的方式的时候,你绑定了100个事件。在改进方式中,你只为一个元素绑定了1个事件,至于是100个事件的效率高,还是1个事件的效率高,相信你也能自行分辨了。

  6.推迟到 $(window).load

  jQuery对于开发者来说有一个很诱人的东西,可以把任何东西挂到$(document).ready下。尽管$(document).rady 确实很有用, 它可以在页面渲染时,其它元素还没下载完成就执行。如果你发现你的页面一直是载入中的状态,很有可能就是$(document).ready函数引起的。你可以通过将jQuery函数绑定到$(window).load 事件的方法来减少页面载入时的cpu使用率。它会在所有的html(包括<iframe>)被下载完成后执行。

以下是引用片段:
$(window).load(function(){ 
     // 页面完全载入后才初始化的jQuery函数.
  });
 
 

  一些特效的功能,例如拖放,视觉特效和动画,预载入隐藏图像等等,都是适合这种技术的场合。

  7.压缩JavaScript

  压缩和最小化你的JavaScript文件。压缩之前,请保证你的代码的规范性,否则可能失败,导致Js错误。

  8.尽量使用ID代替Class

  前面性能优化已经说过,ID选择器的速度是最快的。所以在HTML代码中,能使用ID的尽量使用ID来代替class。看下面的一个例子:

以下是引用片段:
// 创建一个list  var $myList = $('#myList');
  var myListItems = '<ul>'; 
 for (i = 0; i < 1000; i++) { 
      myListItems += '<li class="listItem' + i + '">This is a list item</li>'; 
//这里使用的是class
   }  myListItems += '</ul>'; 
 $myList.html(myListItems); 
 // 选择每一个 li   for (i = 0; i < 1000; i++) { 
     var selectedItem = $('.listItem' + i);  } 
 

  在代码最后,选择每个li的过程中,总共用了5066毫秒,超过5秒了。接着我们做一个对比,用ID代替class:

以下是引用片段:
// 创建一个list  var $myList = $('#myList'); 
 var myListItems = '<ul>'; 
 for (i = 0; i < 1000; i++) {      myListItems += '<li id="listItem' + i + '">This is a list item</li>';
 //这里使用的是id  }  
myListItems += '</ul>'; 
 $myList.html(myListItems);  
 // 选择每一个 li  for (i = 0; i < 1000; i++) { 
      var selectedItem = $('#listItem' + i); 
 } 
 

  在上段代码中,选择每个li总共只用了61毫秒,相比class的方式,将近快了100倍。

  9.给选择器一个上下文

  jQuery选择器中有一个这样的选择器,它能指定上下文。

  jQuery( expression, context );  通过它,能缩小选择器在DOM中搜索的范围,达到节省时间,提高效率。

  普通方式:

以下是引用片段:
$('.myDiv')  
 

  改进方式:

以下是引用片段:
$('.myDiv' , $("#listItem") ) 
 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdxgdw.html