前端-游览器渲染原理

news2025/1/17 9:02:31

渲染 render

vue react render

游览器渲染 html字符串 - > 像素信息

游览器是如何渲染页面的?

当游览器的网络线程收到 html文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列
在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启渲染流程.
整个渲染流程分多个阶段,分别:html解析,样式计算,布局,分层,绘制,分块,光栅化,画每个阶段都有明确的输入输出,上一个阶段的输出会成为下一个阶段的输入.
这样,整个渲染流程就形成了一套组织严密的生产流水线.
渲染的第一步是解析html.
解析过程中遇到css解析css,遇到js执行js.为了提高解析效率,游览器在开始解析前,会启动一个与解析的线程,率先下载html中的外部css文件和外部的js文件
如果主线程解析到link位置,此时外部的css文件还没有下载解析好,主线程不会等待,继续解析后续的html.这是因为下载和解析css的工作是预解析线程中进行的,这就是css不会阻塞html解析的根本原因
如果主线程解析到script位置,会停止解析html,转而等待js文件下载好,并将全局代码解析执行完成后,才能继续解析html.这是因为js代码的执行过程可能会修改当前的dom树,所以dom树的生成必须暂停.这就是js会阻塞html解析的根本原因.

解析html - Parse Html

dom树 通过树形结构关联 Document Object Model
CSS Object Model
document.styleSheets[0].addRule(‘div’,‘color:red’)
启动预解析器 率先下载外部css 帮忙解析css
样式的计算
css属性值得计算过程 层叠 继承
视觉格式化模式 盒模型 包含块 bfc
最终样式-计算后的样式
Computed style 预设值变成绝对值 得到有样式的dom树

布局 - Layout

隐藏的不会出现在布局树里 display:none
在这里插入图片描述
::before
内容必须在行盒中
行盒不能和块盒不能相连 匿名行盒 匿名块盒
dom树和布局layout树不一样

分层 -Layer

老的游览器没有
跟堆叠上文有关的属性 z-index opacity,…
滚动条也要分层
.will-change:transform 设置分层css 告诉游览器
主线程会使用一套复杂的策略对整个布局树中进行分层.分层的好处在于,将来某一个层改变后,仅会对该层进行后续处理,从而提升效率.
滚动条,堆叠上下文,transform ,opcity等央视都会或多或少的影响分层结果也可以通过will-change属性更大程度的影响分层结果

绘制 - paint

生成一个绘制指令为每个层

分块 -Tiling

分块会将每一层分为多个小的区域
合成线程也在渲染进程里
主线程将每个图层的回执信息提交给合成线程,剩余工作将由合成线程完成.合成线程首先对每个图层进行分块,将其划分为更多的小区域.他会从线程池中拿取多个线程来完成分块工作,分块完成后进去光栅化阶段

光栅化 -Raster

光栅化将每个块变成位图
优先处理靠近视口的块
此过程会用到gpu加速,以极高的速度完成光栅化.gpu进程会开启多个线程来完成光栅化,并且优先处理靠近市口区域的快,光栅化的结果,就是一块一块的位图
最后就是画了

画 -Darw

quad每一个块相对屏幕在哪
渲染进程 (沙盒)
渲染主线程
合成线程

什么是reflow? 重新布局

本质就是重新计算layout树
当进行了影响布局树的操作后,需要重新计算布局树,会引发layout
为了避免连续的多次操作导致布局树反复计算,游览器会合并这些操作,当js代码全部完成后再进行统一计算.所以属性造成的reflow是异步完成.
也同样因为如此,当js获取布局属性时,就可能造成无法获取到最新的布局信息.
游览器在反复权衡下,最终决定获取属性立即reflow

什么是repaint?

本质就是重新根据分层信息计算了绘制指令.
当改动了课件样式后,就需要重新计算,会引发repaint
由于元素的布局信息也属于可见样式,所以reflow一定会引起repaint

为什么transform 效率高?

不在主线程之上,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1458646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

梵宁教育被误解投诉诈骗全过程始末

近日,梵宁教育因被部分用户投诉涉嫌诈骗而引起了社会的广泛关注。作为一家有着深厚教育背景和良好教育理念的机构,梵宁教育对此事表示高度重视,并在此做出如下澄清和回应。 近期,梵宁教育接到了一些用户的投诉,称其在参…

每日一题——LeetCode1464.数组中两元素的最大乘积

这题就是找数组里的最大值和次大值 方法一 排序 var maxProduct function(nums) {nums.sort((a,b)>b-a)return (nums[0] - 1) * (nums[1] - 1); }; 消耗时间和内存情况: 方法二 一次遍历: var maxProduct function(nums) {let first-1,second-…

常见面试题:TCP的四次挥手和TCP的滑动窗口

说一说 TCP 的四次挥手。 挥手即终止 TCP 连接,所谓的四次挥手就是指断开一个 TCP 连接时。需要客户端和服务端总共发出四个包,已确认连接的断开在 socket 编程中,这一过程由客户端或服务端任意一方执行 close 来触发。这里我们假设由客户端…

工具:clang-format使用

Visual Studio 在扩展-》管理扩展-》联机-》搜索Format on Save (for VS2022)插件,并安装 安装需要关闭VS,安装后重新打开vs。 这样每次保存源文件时就会自动调用vs默认的clang-format.exe对源码进行缩进,空格等进行格式化 如果想使用自定…

Maven依赖下载报错 unable to find valid certification path to requested target

阿里云改了仓库地址&#xff0c;由原来的http改成了https 解决方案一 可以在maven里面中的镜像改成 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repo…

LeetCode---384周赛

题目列表 3033. 修改矩阵 3034. 匹配模式数组的子数组数目 I 3035. 回文字符串的最大数量 3036. 匹配模式数组的子数组数目 II 一、修改矩阵 简单模拟即可&#xff0c;代码如下 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vecto…

DP读书:《openEuler操作系统》(十)套接字 Socket 数据传输的基本模型

10min速通Socket 套接字简介数据传输基本模型1.TCP/IP模型2.UDP模型 套接字类型套接字&#xff08;Socket&#xff09;编程Socket 的连接1.连接概述(1)基本概念(2)连接状态(3)连接队列 2.建立连接3.关闭连接 socket 编程接口介绍数据的传输1. 阻塞与非阻塞2. I/O复用 数据的传输…

FEP空气采样袋耐强酸应用环境检测污水处理

FEP袋&#xff0c;又称F46&#xff0c;聚全氟乙丙烯膜&#xff0c;是四氟乙烯和六氟丙烯的共聚物。FEP袋子是采用进口聚全氟乙丙烯材质加工而成&#xff0c;可用做化学瓶的储存袋&#xff0c;耐化学腐蚀衬里&#xff0c;离型膜&#xff0c;生物制药细胞培养&#xff0c;可耐压灭…

Win11专业版安装集成了谷歌框架的安卓子系统,包含谷歌商店

1.摘要 上一篇博客讲述了使用微软商店安装安卓子系统的教程 https://blog.csdn.net/RudeTomatoes/article/details/135958882 上述方法的优点是安装过程简单&#xff0c;但是&#xff0c;由于Windows安卓子系统是微软与亚马逊联合开发&#xff0c;默认没有安装谷歌框架。我尝试…

营销系统黑名单优化:位图的应用解析 | 京东云技术团队

背景 营销系统中&#xff0c;客户投诉是业务发展的一大阻碍&#xff0c;一般会过滤掉黑名单高风险账号&#xff0c;并配合频控策略&#xff0c;来减少客诉&#xff0c;进而增加营销效率&#xff0c;减少营销成本&#xff0c;提升营销质量。 营销系统一般是通过大数据分析建模…

h5网页和 Android APP联调,webview嵌入网页,网页中window.open打开新页面,网页只在webview中打开,没有重开一个app窗口

我是h5网页开发&#xff0c;客户app通过webview嵌入我的页面 点击标题window.open跳转到长图页面&#xff0c;客户的需求是在app里新开一个窗口展示长图页面&#xff0c;window.open打开&#xff0c;ios端是符合客户需求的&#xff0c;但是在安卓端他会在当前webview打开 这…

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…

MSS与cwnd的关系,rwnd又是什么?

慢启动算法是指数递增的 这种指数增长的方式是慢启动算法的一个核心特点&#xff0c;它确保了TCP连接在开始传输数据时能够快速地探测网络的带宽容量&#xff0c;而又不至于过于激进导致网络拥塞。具体来说&#xff1a; 初始阶段&#xff1a;当TCP连接刚建立时&#xff0c;拥…

Day50 739每日温度 496下一个更大元素I 503下一个更大元素II

739 每日温度 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, 7…

【Unity】管道流动模拟Shader

【Unity】管道流动模拟Shader 抽象模拟管道介质流动的效果&#xff0c;使用顶点片元着色器。可以调整管线光泽&#xff0c;颜色&#xff0c;流动方向&#xff0c;透明度&#xff0c;流动体粗细&#xff0c;流动速度和横断面。 实现效果 Demo效果 Demo下载地址 管线光泽调整 …

OpenAI最新Sora视频学习与生成的技术分析与最新体验渠道

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

从 AGP 4.1.2 到 7.5.1——XmlParser、GPathResult、QName 过时

新年首发&#xff0c; 去年的问题&#xff0c;今年解决~ 问题 & 排查 1: Task failed with an exception. ----------- * What went wrong: Execution failed for task :app:processCommonReleaseManifest. > org.xml.sax.SAXParseException; lineNumber: 1; columnNu…

内存计算研究进展-通用的近数据计算架构

通用的近数据计算架构方面代表性工作有&#xff1a; AMD Research的 TOP-PIM&#xff0c;Carnegie Mellon Univeristy 的 TOM&#xff0c; University of Wisconsin-Madison 的 DRAMA 和 NDA&#xff0c;Seoul National University 的 PEI &#xff0c;IBM Research 的 AMC (ac…

【金蝶BI方案】做生产订单分析,要分析哪些指标?

一般来说&#xff0c;做生产订单分析要做量大部分的内容。一个是分析总的计划生产数据和实际完成情况、良品情况&#xff1b;另一个则是详细分析每种产品的订单量、计划生产数量、实际完工数量等。从而让运营管理者更加直接地了解到生产订单情况&#xff0c;更好地安排生产任务…

单片机学习笔记---红外遥控红外遥控电机调速(完结篇)

目录 低电平触发中断和下降沿触发中断的区别 红外遥控 Int0.c Int.h Timer0.c Timer0.h IR.c IR.h main.c 红外遥控电机调速 Timer1.c Timer.h Motor.c Motor.h main.c 上一节讲了红外发送和接收的工作原理&#xff0c;这一节开始代码演示&#xff01; 提前说…