博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器的DOM操作
阅读量:6582 次
发布时间:2019-06-24

本文共 1804 字,大约阅读时间需要 6 分钟。

操作DOM,首先我们要理解什么事DOM,DOM是指文档对象模型,具体是指网页上XHTML中文档正文标题、段落、列表、样式、ID、class及所有其它出现的数据的一个内部表示。DOM的主要思想是HTML上每个元素分别对应于DOM中的一个节点,DOM定义了许多类型来表示节点的多个方面。

这是JavaScript常用的DOM操作

 

这是JQuery常用的DOM操作

 

      在DOM树中。每个节点可以有零到多个子节点,但每个子节点只能有一个父节点

 

性能影响

 

     DOM操作会导致最重要的,也是我们最需要的问题就是导致用户阻塞的重构(reflow)和重绘(repaint).比较通俗的一句话就是你在页面上的任何操作都是有代价的,有些大有些小,如果我们的操作比较频繁或者波及范围较大,那么就要讲究方式和技巧.reflow和repaint就是我们在改变页面或者说操作DOM时,会带来的两种后果。

    reflow意味着结构的改变,比如一堆元素堆叠,改变其中一个的宽高,那么相应的所有元素的位置都要改变.repaint意味着样式的改变比如div调整了背景色等,但是位置不变,只改变我们操作的元素.所以通常来看repaint的代价要远小于reflow,速度也更快

所以我们应该尽量减少或不使用DOM操作,有一下一些原则:

    (1) 能放到DOM操作之外的操作就放到外面,DOM操作要尽量少.

   DOM操作优化中这一观点在网上已经很普及了,很多例子都有比如遍历一个数组然后逐渐把内容添加到DOM上,这里就推荐先遍历完数组,然后一次性在DOM上操作.大家可以看代码:

 

// 不好的做法

for (var i=0; i < items.length; i++){

    var item = document.createElement("li");

    item.appendChild(document.createTextNode("Option " + i);

    list.appendChild(item);

}  

 

 

// 更好的做法

// 使用容器存放临时变更, 最后再一次性更新DOM

var fragment = document.createDocumentFragment();

for (var i=0; i < items.length; i++){

    var item = document.createElement("li");

    item.appendChild(document.createTextNode("Option " + i);

    fragment.appendChild(item);

}

list.appendChild(fragment);

    (2) 大范围操作先把容器隐藏,在其中操作完成后,再显示.

    (3) 样式操作不要注意修改属性,直接替换class

       你逐一修改要访问很多次,而替换class就相当于批量操作了,访问一次DOM就可以了,当然性能提高了.

    (4) 用变量保存DOM对象而不是多次获取,同时减少操作DOM属性的次数.

//不好

 

function addAnchor(parentElement, anchorText, anchorClass) {

  var element = document.createElement('a');

  parentElement.appendChild(element);

  element.innerHTML = anchorText;

  element.className = anchorClass;

}

 

 

//更好

 

function addAnchor(parentElement, anchorText, anchorClass) {

  var element = document.createElement('a');

  element.innerHTML = anchorText;

  element.className = anchorClass;

  parentElement.appendChild(element);

}

这些关于DOM的操作,是在我不太了解的基础上,参考得来的,希望大家看到后,对自己有帮助。能够更好地将性能优化,。

 

转载于:https://www.cnblogs.com/wsy19940622/p/4593272.html

你可能感兴趣的文章
Easy APNs Provider的使用
查看>>
多个AsynceTask无法同时运行的现象分析
查看>>
搭建mysql集群
查看>>
职场生存|与努力同样重要的是,学会做好这 6 点!
查看>>
Gson工具包使用
查看>>
有一个系统修复处于挂起状态,需要重新启动才能完成该修复
查看>>
Ubuntu上安装bind9
查看>>
访问共享提示“服务器存储空间不足,无法处理此命令。”
查看>>
3月18日学习笔记
查看>>
Linux中目录权限之小见
查看>>
maven的tomcat插件设置
查看>>
C#读写XML文件
查看>>
ORACLE 字符串操作
查看>>
NAT的理解与配置步骤
查看>>
diskpart修改盘符脚本
查看>>
Linux下解压rar格式压缩包
查看>>
Liunx 下安装mysql
查看>>
Win Server 2003 Web服务器安全设置十五项
查看>>
jQuery文本框表情插件
查看>>
做一个上下翻页图片的功能day1.2
查看>>