优化DOM交互

DOM操作与交互要消耗大量时间,所以优化DOM交互有重大意义。

1、最小化现场更新

    如果需要访问的DOM部分是已经显示的页面的一部分,那么这就是在进行一个现场更新。现场更新得越多,代码完成执行所需要的时间越多;完成一个操作所需要的 现场更新次数越少,则代码执行得越快。

  下面是反模式例子:

 var list = document.getElementById("myList"),
        item,
        i;
    for(i=0;i<10;i++){
        item = document.createElement("li");
        list.appendChild(item);
        item.appendChild(document.createTextNode("Item"+i));
    }

  在上面的例子中每次循环进行了两次的现场更新,一共进行了20次的现场更新,在每次的现场更新中,浏览器都需要重新计算无数尺寸进行更新。改进方法如下,使用createDocumentFragment文档片段来构建DOM结构,可以看作是一种“虚拟内存”。

  

 var list = document.getElementById("myList"),
        fragment = document.createDocumentFragment(),
        item,
        i;

    for(i=0;i<10;i++){
        item = document.createElement("li");
        fragment.appendChild(item);
        item.appendChild(document.createTextNode("item"+i));
    }
    list.appendChild(fragment);

  在上面的方法中,只进在list.appendChild(fragment)中进行了一次的现场更新,故此性能更优。

2、使用innerHTML

    使用innerHTML要比使用标准的DOM方法创建同样多的DOM结构要来的快。

   将前面的第一个例子改写如下:

var list = document.getElementById("myList"),
    html = "",
    i;
for (i = 0; i < 10; i++) {
    html += "<li>Item " + i + "</li>";
}
list.innerHTML = html;

  虽然字符串的连接存在性能的损失,但是这种方式还是要比进行多个DOM操作来得快。

3、使用事件代理

  页面上的事件处理程序的数量与页面响应用户交互的速度成负相关。可以使用事件冒泡的方法,在祖先上注册事件处理程序,从而减少其数量。

4、注意HTMLCollection的使用

  时刻注意要减少HTMLCollection集合的访问次数。例如可以把将长度计算移到for循环的初始化部分,在for循环中保存需要访问的HTMLCollection元素。

  例子:

var images = document.getElementById("img"),
    image,
    i,len;
for(i=0,len=images.length;i<len;i++){
    image = images[i];
    //进行更多的处理
}

以上内容参考《javascript高级程序设计》

时间: 2025-01-15 06:05:28

优化DOM交互的相关文章

JavaScript性能优化 DOM编程

最近在研读<高性能JavaScript>,在此做些简单记录.示例代码可在此处查看到. 一.DOM 1)DOM和JavaScript 文档对象模型(DOM)是一个独立于语言的,用于操作XML和HTML文档的程序接口(API). 浏览器通常会把DOM和JavaScript独立实现.例如Chrome中使用Webkit的WebCore库渲染页面,用V8作为JavaScript引擎. 访问DOM天生就慢,将DOM和JavaScript比喻为两个岛屿,两处同行要收过桥费,ECMAScript访问DOM的次

web前端优化--DOM性能优化

1.DOM访问与修改的优化: DOM访问是有代价的,修改DOM则会引起DOM的重绘与重排,而这两种操作会消耗性能. (1)缓存DOM:将频繁访问的对象或属性使用变量缓存起来,每次访问的时候,直接使用变量,而不是再次去访问DOM. (2)减少重绘与重排: 批量修改:使用文档片段documentFragment.使用类名一次性修改多个样式.或者使用CSSText属性 如 ele.style.cssText = 'color:red;border:1px solid green'; 元素脱离文档流,再

js代码性能优化的几个方法

相信写代码对于大部分人都不难,但想写出高性能的代码就需要一定的技术积累啦,下面是一些优化JavaScript代码性能的常见方法. 一.注意作用域 1.避免全局查找 使用全局变量和函数肯定要比局部的开销更大,因为要涉及作用域链上的查找,请看以下函数: 1 function demo1() { 2 var imgs = document.getElementByTagName("img"); //获取页面所有img标签 3 4 for(var i = 0; i <= imgs.len

js 性能优化 篇一

JS性能优化 摘自:http://www.china125.com/design/js/3631.htm 首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内置优化引擎,将JS编译成本地代码的浏览器,其它浏览器也陆续实现了JS的编译过程.但是,即使到了编译执行JS的新阶段,仍然会存在低效率的代码.)以下总结一些可以改进代码的整体性能的方法. 1.注意作用域 记住一点,随着作用域中的作用域数量的增加,访问当前作用域以外的变量的时间也在增加.所以,访问全局变量

JS 之性能优化

了解JS性能优化是学习前端必备的一项技能.下面就简单的列出几点: 1.注意作用域,避免全局查找. 访问全局变量比访问局部变量慢,是因为需要遍历作用域链,查找作用域链需要额外的时间.所以在一个函数中,将访问多次的全局对象或者域外变量存储为局部变量来使用.如某个方法需引用全局变量的值,则在该方法所在的对象的作用域中定义一个局部变量等于全局变量的值. 避免不必要的属性查找,将属性设置为局部变量. function(){ var title = document.title; for(var i=0;i

javascript最佳实践,包含性能优化、编码实践等。

昨天跳过<javascript高级程序设计>前面几章书的内容,直接跳到最佳实践那一章,然而那一张说的又和我在实习的时候的实践,有很大的关系,因此我就觉得应该整理出来,分享一下,毕竟还是挺好的一部分. 一.编写可维护的代码 可维护的代码就有一些特征: (1)可理解性 (2)直观性 (3)可适应性 (4)可拓展性 (5)可调试性   二.代码约定        1.可读性:代码缩进大小为4个空格 需要进行注释的地方: (1)函数和方法:如函数的目的和用于完成任务所可能使用的算法. (2)大段代码:

《JavaScript高级程序设计》第21-25章

第二十一章 Ajax 与 Comet 1.XMLHttpRequest对象 1)创建XMLHttpRequest对象 function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeof arguments.callee.activ

js最佳实践学习记录

24.1 可维护性 24.1.1什么是可维护性代码 可理解性 直观性 可适应性 可扩展性 可调试性 24.1.2 代码约定 1. 可读性 2. 变量和函数命名 3.变量类型透明    初始化时,最好指定一个变量类型 24.1.3 松散耦合 1. 解耦HTML/Javascript 2. 解耦CSS/Javascript 3. 解耦应用逻辑/事件处理程序 勿将event对象传给其他方法:只传来着event对象中所需的数据: 任何可以在应用层面的动作都应该可以在不执行任何事件处理程序的情况下进行:

JavaScript最佳实践:性能

注意作用域 避免全局查找 一个例子: function updateUI(){ var imgs = document.getElementByTagName("img"); for(var i=0, len=imgs.length; i<len; i++){ imgs[i].title = document.title + " image " + i; } var msg = document.getElementById("msg");