首页 > 其他分享 >为什么操作dom比较耗时

为什么操作dom比较耗时

时间:2023-08-09 15:22:05浏览次数:32  
标签:dom 渲染 js 耗时 引擎 线程 操作

为甚操作dom比较耗时

以前只知道操作dom比较耗时,但是不知道为什么,也没有去深究,今天知道了为什么记录一下

这个问题应该是有上下文的

操作dom比较耗时,应该是相对于普通js操作,操作dom比较耗时,上一段代码比较有说服力

const times = 1000000
console.time('js')
let body = document.body
for(let i = 0;i < times;i++) {
    let tmp = body
}
console.timeEnd('js')
console.time('dom')
for(let i = 0;i < times;i++) {
    let tmp = document.body
}
console.timeEnd('dom')

那么为什么呢
直觉是dom比较大


不过不只如此

浏览器的架构

浏览器是多进程架构,其中里面有两个重要的线程, js 引擎,渲染引擎, js引擎负责执行js
代码, 渲染引擎负责渲染页面信息,html 转化成dom树, css转化成cssom树, 然后合成成render树,
渲染引擎把合成的树渲染成页面,当然这个过程也非常复杂,其中有很多细节,感兴趣的可以去
search一下。

js引擎和渲染引擎是互斥的,就是同一时刻,他俩只能有一个人干活,因为如果他俩
同时干活,同时操作dom, 会导致页面不一致。浏览器为了方式造成死锁,采用了单线程
这两个线程同一时刻,只能有一个线程在执行

铺垫了这么多, 可以说说为什么操作dom耗时了,还得在铺垫一下
操作系统调用一个线程的时候, 需要保存当前线程的执行状态(当前线程的上下文呢),然后读取下一个线程的
上下文,从js引擎执行到渲染引擎执行,必然会有执行上下文切换这个操作,频繁的操作dom,渲染页面
必然会导致频繁的上下文切换。所以操作dom比较耗时。

标签:dom,渲染,js,耗时,引擎,线程,操作
From: https://www.cnblogs.com/kelanmonkperson/p/17616926.html

相关文章

  • 推导分页的原理,分页类的使用,cookie和session的介绍(重要),Django操作cookie
    推导分页的原理分页:当我们要展示的数据特别多的时候,一页展示不完,这个时候我们需要把要展示的数据分成多页展示分页中需要的几个参数:1.总数据有多少条2.每页展示多少条数据(自己规定的20)3.一共展示多少页4.总页数=总数据量/每页展示多少条数据5.当前第几页(前端......
  • C# list常用的几个操作 改变list中某个元素的值 替换某一段数据
    1、改变list中某个元素的值publicclasstb_SensorRecordModel{publicintID{get;set;}publicdecimalValue1{get;set;}}List<tb_SensorRecordModel>list=newList<tb_SensorRecordModel>();li......
  • mybatis的基础操作
    mybatis的基础操作常用的操作,增删改查1.增加@Insert("insertinto表名(字段名)values(字段值)publicvoidinsert(参数);对于要将传递的参数用到sql语句中需要用到#{}例如:参数为idinsertinto表名(id)values(#{id})后一个id为参数的名字然而对于多个参数......
  • 基于CUBEMX的STM32F4 Hal库,配置LVGL(无操作系统版)
    本篇文章移植思路适用于所有嵌入式MCU,包括Arm,STM32,NXP,乐鑫,Nuvoton,Arduino,RT-Thread,Zephyr,NuttX,Adafruit等等。为什么要写这一篇移植教程?也许你会说各种开源论坛上面上,已经有很多移植教程了,为什么还要再重新写一篇?因为很简单我按照前辈们的思路和移植步骤,到最后没有一个成功的,这......
  • 操作系统
    虚拟地址:为了让每个进程都使用独立的物理内存,非必要时,不同进程之间不共享内存。虚拟地址就是实现这一功能的方案。进程运行时,操作系统为进程分配独立的一套「虚拟地址」,虚拟地址和物理地址的映射由操作系统完成。操作系统保证了不同的进程使用的物理内存都是不一样的。页表:存......
  • Kingdom
    KingdomUVA题目描述平面有\(n\)个城市,初始时城市之间没有任何双向道路连接。你的任务是依次执行以下任务:roadAB:在城市\(A\)和城市\(B\)之间连接一条双向道路,保证这条道路不和其他道路在非端点处相交。lineC:询问一条\(y=C\)的水平线和多少个州相交,以及这些州一......
  • MuMu模拟器运行一段时间后Device.Present耗时突然上升
    1)MuMu模拟器运行一段时间后Device.Present耗时突然上升2)​如何在运行过程中获得温度信息3)InputSystem鼠标更换主按键的Bug4)如何禁止Unity向https://config.uca.cloud.unity3d.com发送设备信息这是第347篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子......
  • Tensor - 简介、创建、操作与运算
    一、简介1.1Variable和Tensor的关系Variable是torch.autograd中的数据类型,用于封装Tensor,使其可以进行自动求导。0.4.0后Variable并入了Tensor。#Variable含有的属性datagradgrad_fnrequires_gradis_leaf#Tensor新增的三个属性dtype#9种,包含float、int、bool......
  • 操作系统概述
    2.1.1操作系统的概念操作系统 是一组控制盒管理计算机系统的硬件和软件资源、控制程序执行、改善人机界面、合理地组织计算机工作流程并未用户使用计算机提供良好运行环境的一种系统软件。 目的:提高计算机系统的效率,增强系统的处理能力,提高系统资源的利用率,方便用户使用计算机。2......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......