浏览器原理篇—渲染原理

2023-12-20

目录导航

  1. 为什么要学习浏览器的渲染原理
  2. 浏览器的渲染流程
  3. 浏览器的渲染阻塞
  4. 浏览器的渲染优化

为什么要学习浏览器的渲染原理?

  • 知识深度挖掘:
    • 帮助更好地理解前端性能优化。从而对实现效果进行针对性优化。如:**回流和重绘 **渲染机制。
    • 帮助更好地理解浏览器的运行机制。扩展 浏览器原理 方面的知识。
    • debug时可以更快定位问题。当页面出现渲染问题时,如果对浏览器的工作原理有了解,可以根据症状更快定位问题所在。
  • 面试需要(相关面试题):
    • 从输入URL到页面展示,这中间发生了什么?(网络和渲染)
    • 浏览器的渲染过程?
    • 浏览器的渲染优化?
    • 什么情况下会阻塞渲染?
    • 。。。

浏览器的渲染流程

前言

什么是渲染render

渲染就是将html字符串传成可以显示的一个个像素点的过程。
用函数表示:

function render(htmlStr) {
  //转换过程
  return Html;
}

渲染的时间点

当我们输入一个url时, 网络线程会通过网络通信 给我们返回HTML文档,但网络线程不会在对其进行处理。而浏览器在收到这个HTML文档后,会产生一个 渲染任务 ,传递给 主线程的信息队列 。在 事件循环 的作用下, 渲染主线程 开始了 渲染流程
image.png

渲染流水线

整个渲染流程分为多个阶段,分别是:

  1. HTML 解析 (DOM)
  2. 样式计算 (style)
  3. 布局 (layout)
  4. 分层 (layer)
  5. 绘制 (paint)
  6. 分块 (tiles)
  7. 光栅化 (raster)
  8. 绘画 (draw quad)

每个阶段都有明确的输入输出,上一个阶段的输出会成为下一个阶段的输入。
这样,整个渲染流程就形成了一套组织严密的生产流水线。
image.png
image.png

渲染流程

解析HTML(DOM)

渲染的第一步是 解析 HTML 。字符串转对象
image.png
内敛样式,服务器样式,css外链样式,。。。
image.png
可以在浏览器控制台输入,观察一下:

  1. document.styleSheets
  2. document.styleSheets[0].addRule( ‘div’, ‘border:2px solid #f40 !important’)

解析过程中遇到 CSS 解析 CSS,遇到 JS 执行 JS。为了提高解析效率,浏览器在开始解析前,会启动一个预解析的线程,率先下载 HTML 中的外部 CSS 文件和 外部的 JS 文件。
如果主线程解析到 link 位置,此时外部的** CSS 文件还没有下载解析好,主线程不会等待,继续解析后续的 HTML**。这是因为下载和解析 CSS 的工作是在预解析线程中进行的。这就是 CSS 不会阻塞 HTML 解析的根本原因。
image.png
如果主线程解析到 script 位置,会 停止解析 HTML,转而等待 JS 文件下载好 ,并将全局代码解析执行完成后,才能继续解析 HTML。这是因为 JS 代码的执行过程可能会修改当前的 DOM 树,所以 DOM 树的生成必须暂停。 这就是 JS 会阻塞 HTML 解析的根本原因
image.png
第一步完成后,会得到 DOM 树和 CSSOM 树,浏览器的默认样式、内部样式、外部样式、行内样式均会包含在 CSSOM 树中。

样式计算(style)

渲染的下一步是 样式计算
主线程会遍历得到的 DOM 树,依次为树中的每个节点计算出它最终的样式,称之为** Computed Style**。
在这一过程中,很多预设值会变成绝对值,比如 red 会变成 rgb(255,0,0) ;相对单位会变成绝对单位,比如 em 会变成 px
这一步完成后,会得到一棵带有样式的 DOM 树。
image.png

布局(layout)

接下来是 布局 ,布局完成后会得到布局树。
布局阶段会依次遍历 DOM 树的每一个节点,计算每个节点的几何信息。例如节点的宽高、相对包含块的位置。
大部分时候,DOM 树和布局树并非一一对应。
比如 display:none 的节点没有几何信息,因此不会生成到布局树;又比如使用了伪元素选择器,虽然 DOM 树中不存在这些伪元素节点,但它们拥有几何信息,所以会生成到布局树中。还有匿名行盒、匿名块盒等等都会导致 DOM 树和布局树无法一一对应。
image.png
image.png

分层(layer)

下一步是 分层
主线程会使用一套复杂的策略对整个布局树中进行分层。
分层的好处在于,将来某一个层改变后,仅会对该层进行后续处理,从而提升效率。
滚动条、堆叠上下文、transform、opacity 等样式都会或多或少的影响分层结果,也可以通过 will-change 属性更大程度的影响分层结果。
image.png
可以在开发者工具中查看图层,还可以旋转、放大,帮助我们更清晰地查看图层:
https://www.jd.com/
image.png

绘制(paint)

再下一步是 绘制。
主线程会为每个层单独产生绘制指令集,用于描述这一层的内容该如何画出来。
image.png

分块(tiles)

完成绘制后,主线程将每个图层的绘制信息提交给合成线程,剩余工作将由 合成线程 完成。
合成线程首先对每个图层进行 分块 ,将其划分为更多的小区域。
它会从线程池中拿取多个线程来完成分块工作。
image.png
image.png

光栅化(raster)

分块完成后,进入 **光栅化 **阶段。
合成线程会将块信息交给 GPU 进程,以极高的速度完成光栅化。
GPU 进程会开启多个线程来完成光栅化,并且优先处理靠近视口区域的块。
光栅化的结果,就是一块一块的位图
image.png

绘画(draw quad)

最后一个阶段就是 绘画
合成线程拿到每个层、每个块的位图后,生成一个个「指引(quad)」信息。
指引会标识出每个位图应该画到屏幕的哪个位置,以及会考虑到旋转、缩放等变形。
变形发生在合成线程,与渲染主线程无关,这就是 transform 效率高的本质原因。
合成线程会把 quad 提交给 GPU 进程,由 GPU 进程产生系统调用,提交给 GPU 硬件,完成最终的屏幕成像。
image.png

总结

  1. 渲染进程将 HTML 内容转换为能够读懂的** DOM 树**结构。
  2. 渲染引擎将 CSS 样式表转化为浏览器可以理解的 styleSheets ,计算出 DOM 节点的样式。
  3. 创建 布局树 ,并计算元素的布局信息。
  4. 对布局树进行 分层 ,并生成分层树。
  5. 为每个图层生成 绘制列表 ,并将其提交到合成线程。
  6. 合成线程将图层分成 图块 ,并在光栅化线程池中将图块转换成位图。
  7. 合成线程发送绘制图块命令 **DrawQuad **给浏览器进程。
  8. 浏览器进程根据 DrawQuad 消息 生成页面 ,并 显示 到显示器上。相关概念

重排重绘

上面整个渲染过程:
DOM、Style、layout、layer、paint、tiles、raster、draw quad、display

(1)重排:

修改几何属性,影响layout后面全部;

(2)重绘:

修改绘制属性,影响paint之后;

(3)合成:

1.修改不要布局不要绘制的属性,只影响后续合成操作 tiles后面;性能好;
2.最常见的就是 CSS3 硬件加速(GPU加速),四点
transform: translateZ(0)、opacity、filters、will-change
Will-change提前告诉浏览器元素会发生什么变化;

参考:

https://ke.qq.com/course/5892689/13883868337269329#term_id=106109971

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器原理篇—渲染原理 的相关文章

  • 如何在iframe内部弹出浮层,浮层遮罩整个浏览器

    需求说明 页面内有多级iframe嵌套 iframe内部某些按钮点击后需要弹出浮层 浮层需要将整个浏览器窗口遮罩 且浮层位于浏览窗口中部 解决思路 顶层页面内预留用于显示浮层的div 命名为popdiv 且该div内有一预留的iframe
  • 解决chrom浏览器iframe嵌套写cookie问题

    chrom浏览器iframe嵌套写cookie 1 请求地址协议 2 response头部设置 3 提供如下方式进行设置 1 后端web服务代码如下 2 nginx服务器设置 场景分析描述 chrom浏览器环境下当前网站被第三方iframe
  • cookie 和session 的区别详解

    原文地址 http www cnblogs com shiyangxt archive 2008 10 07 1305506 html 这些都是基础知识 不过有必要做深入了解 先简单介绍一下 二者的定义 当你在浏览网站的时候 WEB 服务器
  • 学习日记--8.5--linux初装

    1 用xmms播放mp3 首先linux自带的xmms缺少一个插件 可以先下载并且安装 xmms mpg123 1 2 7 13 i386 rpm 但是如此之后可能还不可以使用 播放一秒就死住 这时候 在xmms 运行后之上点击 右键 gt
  • Controlling Font Size With Javascript 兼容主流浏览器

  • 【图像处理】索引色 抖色 反锯齿

    图片内容请参考 http www softii com cms article 5560 html 索引色 一些比较老旧的电脑相关硬件和文件格式只能处理 8 位的像素 3 个色频在 8 位的显示设备上所能表现的色彩范围实在是太少了 因此 8
  • Servlet基础_0500_Application

    一 application概念 application即ServletContext 能够被所有的客户端页面共享 不同的浏览器 不同电脑上的浏览器 演示 ServletContextTest java package com servlet
  • 浏览器web播放rtsp视频流解决方案(chrome/IE/firefox/360等)

    代码中的具体参数含义 大家可以移步这里 https wiki videolan org Documentation WebPlugin 找半天 HTML5的可以支持RTMP 但是无法播放RTSP flash也止步于RTMP 最后同事推荐了个
  • 初体验ipad

    初体验ipad 今天星期六 阳光明媚 在去饭堂吃早餐的路上 远远看见排球场人群涌动 听见舞台上有人在唱歌 心想肯定是什么飚歌大赛 跟咱无关 正准备转头离开 突然瞄到 3G体验 几个大字 由于没戴眼镜 看不清 就眯着眼睛看了看 写着 ipho
  • 浏览器的事件轮询(消息轮询)

    目录 浏览器的进程模型 何为进程 何为线程 浏览器有哪些进程和线程 渲染主线程是如何 作的 相关问题 何谓异步 JS为什么会阻塞渲染 JS 中的计时器为什么无法精确计时 任务队列与优先级 浏览器的进程模型 何为进程 程序运 需要有它 专属的
  • Java Servlet的主要功能和作用是什么?

    Servlet 通过创建一个框架来扩展服务器的能力 以提供在 Web 上进行请求和响应服务 当客户机发送请求至服务器时 服务器可以将请求信息发送给 Servlet 并让 Servlet 建立起服务器返回给客户机的响应 当启动 Web 服务器
  • 多益网络校招笔试题(前端工程师)

    1 写出inline和inline block的差别 布局方式相同 唯一的区别在inline block可以设置宽高 inline不可以 另外 inline设置上下内边距和上下外边距会造成一些mess 详见 What is the diff
  • H5 iOS 微信内核软键盘收起,页面不下滑问题解决(微信开发直播间踩坑记 一)

    网上搜了好多下面这段代码完美的解决了我的问题 input textarea on blur function window scroll 0 0 select on change function window scroll 0 0 原理就
  • please remember me(auto login)

    记住我 用户自动登录的实现 auto login 一 什么是用户自动登录 对于我们的网站向已注册用户提供某些专门的服务 比如网上购物 在线下载 收费浏览等等 就会要求用户在使用这些服务之前进入登录页面 输入用户名和密码 并进行验证 如果用户
  • 浏览器打开就是360导航(浏览器被360劫持)

    浏览器打开就是360导航 这个问题之前只是看别人帖子见到过 不知道出了什么问题我的edge和Chrome浏览器突然打开也成了360的导航页面 这才感觉出这个问题的恶心之处 而且顺道说一下 我电脑中也没有装任何360系的应用 但突然就被改了
  • 深入理解浏览器缓存机制 ( http )

    一 介绍 http缓存 浏览器根据当前http请求报文策略 将网路资源存储到本地内存 memory cache 硬盘 disk cache 中 缓存流程 浏览器 浏览器缓存 服务端 发起请求 根据缓存
  • 如何把IE浏览器快速变成灰色来哀悼在汶川地震中遇难的同胞们!

    如何把IE浏览器快速变成灰色来哀悼在汶川地震中遇难的同胞们 把IE浏览器快速变成灰色只要作以下二点即可 第一点 在html页面中 在body中加入下面语句 第二点 在css控制表中 加入下面语句 html filter progid DXI
  • 浏览器有哪些进程?浏览器进程,渲染进程,网络进程,渲染进程有哪些线程?

    浏览器进程 渲染进程有哪些线程 在浏览器中打开两个页面 会开启几个进程 1个浏览器进程 1个网络进程 一个GPU进程 通常一个Tab页对应一个渲染进程 但有其它情况 1 如果页面中有iframe的话 iframe也会运行在单独的进程中 2
  • 浏览器请求队列机制-请求为什么会阻塞

    前言 最近遇到一个问题 我1个站点链接2个后端服务 但1个后端服务有问题 导致访问超时 但请求接口都是分开的 自认为一个服务站点请求超时 不会影响到另外一个请求的 但不是 全部请求都发不出去 为什么呢 是不是浏览器有请求机制管理 正常情况前
  • 浏览器缓存相关面试题一网打尽,理论结合实践,用代码学习缓存问题,建议关注+收藏,(含项目源代码)

    前言 浏览器缓存的问题是面试中关于浏览器知识的重要组成部分 也是性能优化题目的一部分 但是不要被吓到 我话放到这里 就那么点东西 我这一篇文章基本上就涵盖了所有相关的知识点 认真看一遍 所有的问题都是纸老虎 一 准备工作 1 1 拉取仓库

随机推荐

  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • WinSync.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个WinSync
  • 达芬奇18.6DaVinci ResolveStudio(Win/Mac)激活版

    DaVinci Resolve Studio 18是一款业界领先的视频后期制作软件 它集成了剪辑 调色 视觉特效 动态图形和音频后期制作等功能 为用户提供了完整的创作解决方案 该软件不仅适用于电影 电视和网页内容的制作 还广泛应用于广告 纪
  • 小程序模版|报名管理服务源码

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Python 元组完全指南 1

    元组用于在单个变量中存储多个项目 mytuple apple banana cherry 元组是 Python 中的 4 种内置数据类型之一 用于存储数据集合 另外还有列表 集合和字典 它们都具有不同的特性和用途 元组是有序且不可更改的集合
  • WinSyncProviders.dll文件丢失导致程序无法启动问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个WinSync
  • 测试报告和结果分析 —— allure整合pytest生成测试报告

    一 生成HTML测试报告的三种方式 1 unittest和HTMLTestRunner整合 2 allure和pytest整合 3 Jenkins中安装allure插件 Jenkins安装插件出错 不能正常使用 二 allure整合pyte
  • F5创新产品赢得2023年众多全球知名奖项

    西雅图 2023年12月20日 全球多云应用安全和应用交付服务领导者F5 NASDAQ FFIV 日前宣布 公司在2023年斩获多项杰出荣誉 这些殊荣充分彰显了F5在潜心创新和追求卓越方面始终坚守的承诺 同时凸显了公司正在专注于利用更先进的
  • 浅谈小程序开源业务架构建设之路

    一 业务介绍 1 1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态 我们的愿景是 定义移动时代最佳体验 建设智能小程序行业标准 打破孤岛 共建开源 开放 繁荣的小程序行业生态 百度智能小程序的生态玩家有三类 分
  • 华为OD机试真题-部门人力分配-2023年OD统一考试(C卷)

    题目描述 部门在进行需求开发时需要进行人力安排 当前部门需要完成N个需求 需求用requirements 表示 requirements i 表示第i个需求的工作量大小 单位 人月 这部分需求需要在M个月内完成开发 进行人力安排后每个月的人
  • std::string 转为 LPCTSTR类型

    在串口通讯中使用CreateFile 时 第一个参数类型为 LPCTSTR 通常使用的string类型需要进行转换 HANDLE CreateFile LPCTSTR lpFileName 指向文件名的指针 DWORD dwDesiredA
  • winrscmd.dll文件缺少导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个winrscm
  • 互操作性(Interoperability)如何影响着机器学习的发展?

    互操作性 Interoperability 也称为互用性 即两个系统之间有效沟通的能力 是机器学习未来发展中的关键因素 对于银行业 医疗和其他生活服务行业 我们期望那些用于信息交换的平台可以在我们需要时无缝沟通 我们每个人都有成千上万个数据
  • winsockhc.dll文件缺少导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个winsock
  • SpringBoot代码混淆与反混淆加密工具详解

    目录 反编译 混淆 正文 一共就两步 无需源码 直接对ipa文件进行混淆加密 打开要处理的IPA文件 设置签名使用的证书和描述文件 开始ios ipa重签名 简单就是把代码跑一哈 然后我们的代码 java文件 就被编译成了 class 文件
  • 38条Web测试经验分享

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 详解数据科学自动化与机器学习自动化

    过去十年里 人工智能 AI 构建自动化发展迅速并取得了多项成就 在关于AI未来的讨论中 您可能会经常听到人们交替使用数据科学自动化与机器学习自动化这两个术语 事实上 这些术语有着不同的定义 如今的自动化机器学习 即 AutoML 特指模型构
  • winrssrv.dll文件缺少导致程序无法启动问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个winrssr
  • RPA机器人助力义务教育招生随机派位系统

    作为一名教育行业从业者 我深切地感受到招生工作中的繁琐和低效 每年招生季 我们需要处理大量的报名信息 进行筛选和录取工作 然而 由于人力资源有限 往往会出现疏漏和错误 给招生工作带来了不小的困扰 幸运的是 我们发现了八爪鱼RPA这一强大的工
  • 浏览器原理篇—渲染原理

    目录导航 为什么要学习浏览器的渲染原理 浏览器的渲染流程 浏览器的渲染阻塞 浏览器的渲染优化 为什么要学习浏览器的渲染原理 知识深度挖掘 帮助更好地理解前端性能优化 从而对实现效果进行针对性优化 如 回流和重绘 渲染机制 帮助更好地理解浏览