前端开发

 首页 > 前端开发 > javascript > javascript操作DOM之性能优化最新评论添加评论

javascript操作DOM之性能优化最新评论添加评论

分享到:
【字体:
导读:
         [导读] javascript操作DOM之性能优化 什么是DOM? 用于操作XML和HTML文档的应用程序 Dom节点 2. Dom树 3.Dom API DOM优化 浏览器会把js和dom独立实现,js每次操作dom,都会增加一次耗时,为了提高dom性能,...

javascript操作DOM之性能优化

什么是DOM?


 用于操作XML和HTML文档的应用程序

Dom节点  2. Dom树   3.Dom API  

DOM优化


浏览器会把js和dom独立实现,js每次操作dom,都会增加一次耗时,为了提高dom性能,就要尽可能减少js对dom的操作,

        以下是两个测试







可以明显看出,test2只操作了一次dom,性能提高了很多


减少DOM操作的方法:

使用节点克隆 node.cloneNode()代替创建新的重复节点

使用局部变量代替访问节点集合,例如

var doc=document;

   var div=doc.getElementById('div');

   var input=doc.getElementById('input');

尽量用只获取元素节点的获取方式,例如 使用children代替childNodes    firstElementChild代替firstChild

选择器API: 使用querySelectorAll(除IE8以下的浏览器都得到良好支持)

DOM与浏览器


重排:改变页面内容的过程

重绘:重排结束之后,浏览器显示内容的过程

       可以通过以下的方式减少重排和重绘的过程,从而提升浏览器性能



尽量在appendChild()前面进行操作


for(var i=0;i<50000;i++){
    var li=document.createElement('li');
    //不推荐
    ul.appendChild(li);
    li.innerHTML='li';
 }
for(i=0;i<5000;i++){
     var li=document.createElement('li');
     //推荐
     li.innerHTML='li';
     ul.appendChild(li);
}


使用cssText合并dom操作

缓存布局信息. 例如:


window.onload = function(){
    var oDiv = document.getElementById('div1');
    var L = oDiv.offsetLeft;
    var T = oDiv.offsetTop;
    setInterval(function(){
        L++;
        T++;
        oDiv.style.left = L + 'px';
        oDiv.style.top = T + 'px';
    },30);
};


利用文档碎片


window.onload = function(){
    var oUl = document.getElementById('ul1');
    var oFrag = document.createDocumentFragment();
    for(var i=0;i<5000;i++){
        var oLi = document.createElement('li');
        oFrag.appendChild(oLi);
    }
    oUl.appendChild(oFrag);
};

 DOM与事件


通过事件代理(事件委托)来提升浏览器性能


console.time('test1');
      for(i=0;i


//下面是事件代理绑定事件

console.time('test2');
       oUl.onclick=function(e){
             e=e || event;
             var t=e.target || e.srcElement;
             if(t.nodeName.toLowerCase()=='li'){
                 t.onclick=function(){
                     alert(1);
                };
            }
        };
 console.timeEnd('test2');//火狐下测试 1.54ms


DOM与前端模板


更好的对逻辑和视图进行分离,MVC框架的基础


分享到:
js生成唯一id,js生成uuid最新评论添加评...
js生成前端唯一id,比如uuid 简单的生成: 虽然此方法简单但是大批量生成会有重复...,但是性能好。 function guid() {       return Number(Math.random().toString().substr(3, 3) + Date.now()).toString(36); } 复杂的生成: 可以利用时间戳,目前亲测同时10W条没有重复。 function formatDateTime() {...
js性能调优检测最新评论添加评论
js性能调优检测,打开调试器,切换到timer,点击左下角的record按钮开始,切换到memory视图,在文档中点击鼠标左右键,看股价走势图 function Allocate(kbs){     this.mem = new Array(kbs * 1024 + 1).join(&#039; &#039;);     this.destroy = function(){         this.mem = null; ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……