首页 > 其他分享 >js操作DOM为什么会影响性能

js操作DOM为什么会影响性能

时间:2022-10-13 17:08:42浏览次数:43  
标签:浏览器 DOM 性能 js HTML 文档 操作 节点


DOM是什么?

DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API。DOM 是载入到浏览器中的文档模型,以节点树的形式来表现文档,每个节点代表文档的构成部分(例如:页面元素、字符串或注释等等)。在浏览器中主要用于与HTML文档打交道,并且使用DOM API用来访问文档中的数据。

js操作DOM为什么会影响性能_xml

DOM的作用

  • DOM 将HTML文档呈现为带有元素、属性和文本的树结构(节点树)。
  • 它允许运行在浏览器中的代码访问文件中的节点并与之交互。节点可以被创建,移动或修改。事件监听器可以被添加到节点上并在给定事件发生时触发。

优点和缺点

  • DOM的优势主要在于易用性强,使用DOM时,将把所有的XML文档信息都存在于内存中,并且遍历简单,支持XPath,增强了易用性。
  • DOM的缺点主要表现在效率低,内存占用量过高,对于大文件来说几乎不可能。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将文档的每个Element,Attribute,Processing-instruction和Comment都创建了一个对象,这样在DOM机制中运用了大量对象的创建和销毁无疑影响其效率。

为什么说js操作DOM会影响性能呢?

        用我们传统的开发模式,原生JS或JQ操作DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。在一次操作中,我需要更新10个DOM节点,浏览器收到第一个DOM请求后并不知道还有9次更新操作,因此会马上执行流程,最终执行10次。例如,第一次计算完,紧接着下一个DOM更新请求,这个节点的坐标值就变了,前一次计算为无用功。计算DOM节点坐标值等都是白白浪费的性能。即使计算机硬件一直在迭代更新,操作DOM的代价仍旧是昂贵的,频繁操作还是会出现页面卡顿,影响用户体验。

  • 在浏览器中DOM的实现和ECMAScript是分离的。
  • ES和DOM是两种东西,每次连接都需要消耗性能
  • 操作DOM会导致重排和重绘,重排会占用、消耗CPU; 重绘会占用、消耗GPU

标签:浏览器,DOM,性能,js,HTML,文档,操作,节点
From: https://blog.51cto.com/u_13028258/5753998

相关文章

  • JS判断数据类型
    怎么判断对象类型?可以通过​​Object.prototype.toString.call(xx)​​​。这样我们就可以获得类似​​[objectType]​​的字符串。​​instanceof​​​可以正确的判断......
  • JS实现二分搜索
    二分查找的前提为:数组、有序。逻辑为:优先和数组的中间元素比较,如果等于中间元素,则直接返回。如果不等于则取半继续查找。非递归实现functionbinarySearch(arr,target){......
  • JS面试点- bind / call / apply
    bind/call/apply可用于this的显式绑定this绑定的是call,apply,bind的第一个参数​​call()方法​​vara={user:'fx',fn:function(){console.......
  • 在考虑闭包的情况下JS变量存储在栈与堆的区分
    变量存储在闭包中的问题按照常理来说栈中数据在函数执行结束后就会被销毁,那么 ​​JavaScript​​ 中函数闭包该如何实现,先简单来个闭包:functioncount(){letnum=......
  • js 输入框中过滤表情,颜文字(正则)
    letname=this.name //this.name为输入框中的输入内容 varregStr=/[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uD......
  • JS判断数组中是否包含某个值
    方法一:array.indexOf此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1。vararr=[1,2,3,4]varindex=arr.indexOf(3)console.log(index)方法......
  • JS实现继承的方法
    方法一:借助callfunctionParent(sex){this.name='fx'this.sex=sex}Parent.prototype.test=function(){console.log('我是函数')}Parent.prototype.wh......
  • js判断手机系统是android还是ios?
    varu=navigator.userAgent;//识别各种浏览器varisAndroid=u.indexOf('Android')>-1||u.indexOf('Adr')>-1;//android终端varisiOS=!!u.match(/\(i[^;]......
  • js倒计时
    倒计时//倒计时输入时间-现在时间varinputTime=prompt('请输入当前时间,格式为YYYY-MM-DD或YYYY/MM/DD');//prompt返回值是字符串要进行数据类型转换......
  • js逆向案例
    js逆向案例目录零、概述一、请求参数|Cookie|Referer校验(⭐)1、案例1_有道翻译2、案例2_百度翻译二、参数响应如何获取AES、DES、RSA(⭐)1、案例3_建筑市场_AES2、案例4_毛毛租......