首页 > 其他分享 >浏览器的渲染机制

浏览器的渲染机制

时间:2023-05-02 22:33:43浏览次数:32  
标签:CSSOM JavaScript 浏览器 DOM 渲染 构建 机制

1.页面加载过程

在介绍浏览器渲染过程之前,想简明扼要的介绍下页面的加载过程,有助于更好的理解后续渲染过程,要点如下:

  • 浏览器根据DNS服务器得到域名的IP地址
  • 向这个IP的机器发送HTTP请求
  • 服务器收到、处理并返回HTTP请求
  • 浏览器得到返回内容

2.浏览器渲染过程

2.1.构建渲染树

当我们生成DOM树和CSSOM树以后,就需要将这两棵树组合为渲染树。

在这一过程中,不是简单的将两者合并就行了。渲染树只会包括需要显示的节点和这些节点的样式信息,如果某个节点是display:none的,那么就不会在渲染树中显示。

2.2.浏览器如果渲染过程中遇到JS文件怎么处理

渲染过程中,如果遇到<script>就停止渲染,执行JS代码。因为浏览器渲染和JS执行共用一个线程,而且这里必须是单线程操作,多线程会产生渲染DOM冲突。JavaScript的加载、解析与执行会阻塞DOM的构建,也就是说,在构建DOM时,HTML解析器若遇到了JavaScript,那么它会暂停构建DOM,将控制权移交给JavaScript引擎,等JavaScript引擎运行完毕,浏览器再从中断的地方恢复DOM构建。

也就是说,如果想首屏渲染得越快,就越不应该在首屏就加载JS文件,这也是都建议将script标签放在body标签底部的原因。当然在当下,并不是说script标签必须放在底部,因为你可以给script标签添加defer或者async属性.

2.3.JS文件不只是阻塞DOM的构建,它会导致CSSOM也阻塞DOM的构建

原本DOM和CSSOM的构建是互不影响的,井水不犯河水,但是一旦引入JavaScript,CSSOM也开始阻塞DOM的构建,只有CSSOM构建完毕后,DON再恢复DOM构建。这是为什么呢?原因如下:

因为JavaScript不只是可以改DOM,它还可以改样式,也就是它可以更改CSSOM。因为不完整的CSSOM是无法使用的,如果JavaScript想访问CSSOM并更改它,那么在执行JavaScript时,必须要能拿到完整的CSSOM。所以就导致了一个现象,如果浏览器尚未完成CSSOM的下载和构建,而我们却想在此时运行脚本,那么浏览器将延迟脚本执行和DOM构建,直至其完成CSSOM的下载和构建。也就是说,在这种情况下,浏览器会先下载和构建CSSOM,然后再执行JavaScript,最后再继续构建DOM。

3.布局与绘制

当浏览器生成渲染树以后,就会根据渲染树来进行布局(也可以叫做回流)。这一阶段浏览器要做的事情是要弄清楚各个节点在页面中的确切位置和大小。通常这一行为也被成为"自动重排"。

布局流程的输出是一个"盒模型",它会精确地捕获每个元素在视口内的确切位置和尺寸,所有相对测量值都将转换为屏幕上的绝对像素。

布局完成后,浏览器会立即发出"Paint Setup"和"Paint"事件,将渲染树转换成屏幕上的像素。

标签:CSSOM,JavaScript,浏览器,DOM,渲染,构建,机制
From: https://www.cnblogs.com/pwindy/p/17368441.html

相关文章

  • 两篇Science文章揭示癌症治疗中细胞感应氧气的新机制
    奥卢大学和哈佛大学的研究人员发现了当前未知的新机制,身体细胞通过该机制感应氧气。缺氧对基因的功能有直接影响,并抑制细胞分化。 该研究发表在Science杂志,其将为癌症药物的开发开辟新的机会。 该发现的核心是组蛋白去甲基化酶,其任务是调控染色质的结构。研究人员证明,缺氧会抑制......
  • 【Web】前端框架对微软老旧浏览器的支持
    零、原因最近要做一个项目,要能在学校机房运行的,也要在手机上运行。电脑和手机,一次性开发,那最好的就是响应式前端框架了。手机和正常的电脑兼容性问题应该都不大,但是学校机房都是Win7的系统,自带的都是IE8的浏览器。虽然有安装谷歌浏览器、360浏览器啥的,但是默认的还是IE浏览器。这......
  • LINUX 串口设备行规程——回车检测机制
    做项目时调用串口,遇到了只有存在回车时才能read到数据的情况,这是设置了行规程的结果。禁用行规程即可取消按行读取机制,如下:(建议大部分情况下都禁用)newtio.c_lflag&=~ICANON;......
  • Vue解决代码重用页面不重新渲染问题
      1打开views->component->layout->AppMain.vue2 修改这两个地方OK 3 大功告成了!  key意思是计算属性(判断是否已经有值,没有的话那就赋值,有的话让key更新为当前属性) ......
  • CancellationToken 取消机制
    1、背景在我们访问一个十分耗时的请求的时候(这里以web请求举例)如果请求执行到一半的时候,用户把页面关掉了,那后台还在执行请求就会造成资源的浪费,所以需要引入取消请求机制2、举例代码很简单,直接居个小例子[HttpGet("GetFile")]publicasync......
  • B/S 结构系统的 缓存机制(Cookie) 以及基于 cookie 机制实现 oa 十天免登录的功能
    B/S结构系统的缓存机制(Cookie)以及基于cookie机制实现oa十天免登录的功能@目录B/S结构系统的缓存机制(Cookie)以及基于cookie机制实现oa十天免登录的功能每博一文案1.Cookie的概述2.session与Cookie之间的联系:3.Cookie的作用:4.Cookie的生成机理的原理:5......
  • Hibernate缓存机制
      Hibernate缓存分类:Hibernate的缓存范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作......
  • HTTPS 研究机制
    HTTPS存在不同于HTTP的默认端口,HTTP默认端口是80或8080,HTTPS默认端口是443或者8443。HTTPS有一个加密/身份验证层(在HTTP与TCP之间),这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯(数据传输)方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。HTTPS和HTTP的......
  • 手写web框架--了解web运行机制。
    第一步--写一个服务端importsocketserver=socket.socket()#默认就是TCP协议server.bind(('127.0.0.1',8080))server.listen(5)whileTrue:conn,addr=server.accept()#三次四次挥手data=conn.recv(1024)#接收消息print(data)conn.se......
  • 记一次nginx配置不当引发的499与failover 机制失效
    背景nginx499在服务端推送流量高峰期长期以来都是存在的,间或还能达到告警阈值触发一小波告警,但主观上一直认为499是客户端主动断开,可能和推送高峰期的用户打开推送后很快杀死app有关,没有进一步探究问题根源。然而近期在非高峰期也存在499超过告警阈值的偶发情况,多的时候一天几......