zoukankan      html  css  js  c++  java
  • web前端优化--DOM性能优化

    1、DOM访问与修改的优化:

    DOM访问是有代价的,修改DOM则会引起DOM的重绘与重排,而这两种操作会消耗性能。

    (1)缓存DOM:将频繁访问的对象或属性使用变量缓存起来,每次访问的时候,直接使用变量,而不是再次去访问DOM。

    (2)减少重绘与重排:

        批量修改:使用文档片段documentFragment、使用类名一次性修改多个样式、或者使用CSSText属性

      如 ele.style.cssText = 'color:red;border:1px solid green';

         元素脱离文档流,再做修改:将元素隐藏或者克隆一份,在对其进行修改,完成修改后再显示。(对隐藏元素的操作不会引起重绘重排)

    (3)选择器的使用,使用更快的querySelectorAll('#div1 .active')。

      注意:使用getElementsByTagName等返回HTML集合的方法时,这些返回的HTML集合会实时连接着底层文档,比如增加了一个元素,HTML结合会立即反应出来。

    可以使用变量缓存,或者将HTML集合拷贝到一个数组中,访问数组的效率会比访问HTML集合要快

    下面这段代码会陷入死循环:

    function loopAlways(){
          var odivs = document.getElementsByTagName('div');
          for(var i=0;i<odivs.length;i++){ console.log(odivs.length);  //odivs是一个HTML集合,实时和文档连接,记录最新变化
          var d = document.createElement('div');
           document.body.appendChild(d);
         }
    
        }

    改成下面这种,将集合长度缓存下来,就不会出现上面的情况

     var odivs = document.getElementsByTagName('div');
          for(var i=0,len=odivs.length;i<len;i++){ 
            var d = document.createElement('div');
            document.body.appendChild(d);
         }

    (4)使用事件委托:避免对同类元素同时绑定事件,而是使用事件冒泡机制,在父元素上绑定。

     (5) innerHTML 与DOM :innerHTML稍快 (除了Webkit内核的浏览器)

      

  • 相关阅读:
    Unix/Linux笔记全集
    深入浅出-变长参数
    基于 SSH 的远程操作以及安全,快捷的数据传输<转>
    面向对象的特性—— 封装
    wpf 窗体翻页效果
    wpf控件拖动
    Wpf 导出CSV文件
    wpf 导出Excel
    Wpf Button 样式
    wpf简单进度条
  • 原文地址:https://www.cnblogs.com/lydialee/p/4808042.html
Copyright © 2011-2022 走看看