【面试题】前端必修-浏览器的渲染原理

news2024/10/5 16:28:44

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

 

 

1.浏览器的渲染原理

  1. #浏览器是如何渲染页面的

    1.什么叫渲染 render

    当我们输入一个url地址的时候,拿到的其实是一个字符串,
    渲染的过程就是把一个字符串经过一 系列的高度运算变成一个个像素点传递给显卡进行显示。

    2.渲染的时间点

    当浏览器的网络线程收到html文档时,会产生一个渲染任务,并将其传递给渲染任务的主线程的消息队列中等待下次渲染的主线程轮询。

    整个渲染大概分为下面几点:html解析 ->样式计算->布局->绘制->分化->光栅栏->

  2. #解析html - Parse html

    浏览器解析html的流程分为三步,第一首先拿到这个字符串的html,并且再次开一个线程,叫做预解析
    线程,因为下载解析css也是会需要时间的,如果都放在主线程来做会有时间忧虑,
    为了提高效率所
    以先开始预解析进程帮助渲染主线程进行css的预下载和解析,解析好了返给渲染主线程,
    让主线程
    去生成cssom,这就是css不会阻塞html的根本原因。第二当碰到js文件的时候浏览器会怎么做呢,
    他会先暂停浏览器的一切行为,等待预解析线程给返回提前下载好的js,
    js也是预解析线程提前下载的,如果主线程解析到`script`位置,会停止解析 HTML,
    转而等待 JS 文件下载好,并将全局代码解析执行完成后,才能继续解析 HTML。这是因为 
    JS 代码的执行过程可能会修改当前的 DOM 树,所
    以 DOM 树的生成必须暂停。这就是 JS 会阻塞 HTML 解析的根本原因。最后解析完成后,
    会得到 
    DOM 树和 CSSOM 树,浏览器的默认样式、内部样式、外部样式、行内样式均会包含在 CSSOM 树中。


     

  3. #布局 - Layout

    第一步我们拿到了生成的DOM 树和 CSSOM 树,这一步就是要对DOM 树中每个节点中
    有什么信息进行计算,这一过程中,很多预设值会变成绝对值,
    比如`red`会变成`rgb(255,0,0)`;相对单位会变成
    绝对单位,比如`em`会变成`px`,这一步完成后,会得到一棵带有计算后样式的 DOM 树。
  4. #分层 - Layer

     
    上一步我们把每个DOM节点的样式都计算了出来,这一步的就是根据上一步提供的样式计
    算出他的当前位置节点在哪大部分时候,DOM 树和布局树并非一一对应。
    比如`display:none`的节
    点没有几何信息,因此不会生成到布局树;又比如使用了伪元素选择器,
    虽然 DOM 树中不存在这些
    伪元素节 点,但它们拥有几何信息,所以会生成到布局树中。还有匿名行盒、
    匿名块盒等等都会导致DOM 树 和布局树无法一一对应。


     

  5. #分块 - Tiling

    浏览器的分层模式在某些老版本的浏览器没有,建议更新谷歌到最新浏览器寻找
    分层的设计理念就是为了防止用户频繁更新页面而设计出来的,用户更改这一层的数据只
    会对这一层进行更新从而提升效率。滚动条、堆叠上下文、transform、opacity 等
    样式都会或多或少的影响分层结果,也可以通过`will-change`属性更大程度的影响分
    层结果

  6. #绘制 - Paint

在完成图层的构建后就进行到了绘制阶段,绘制阶段会把每个图层分成很多小的绘制指令,就好像我们
现在要画画你是一点点画的出来的并不是一下都出来的,每一步都会在你脑海中呈现每一条的指令

 7 #分块 - Tiling

分块会将每一层分成多个小的区域

8. #光栅化 - Raster

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

9. #画 - Draw

 合成线程计算出每个位图在屏幕上的位置,最终交给GPU呈现

10. #课后小技巧

1.在前端开发中,div、p等为什么是块类型是因为按照w3c其默认的CSS样式规则被划分为两种类型,默认就
  给他们设置display:block。而并不是他们本身就是为块类型

2.在css中可以用js来控制css。使用document.styleSheets可以为css创建一个新规则来执行,并
  document.styleSheets 可以获取到当前除了内外联样式和内置默认的所有css(内外部)样式

3.什么是 reflow(回流)?
    reflow 的本质就是重新计算 layout 树。
    当进行了会影响布局树的操作后,需要重新计算布局树,会引发 layout。
    为了避免连续的多次操作导致布局树反复计算,浏览器会合并这些操作,当 JS 代码全部完成后再进
    行统一计算。所以,改动属性造成的 reflow 是异步完成的。也同样因为如此,当 JS 获取布局属性
    时,就可能造成无法获取到最新的布局信息。 浏览器在反复权衡下,最终决定获取属性立reflow。
    
4.什么是 repaint(重绘)?
  repaint 的本质就是重新根据分层信息计算了绘制指令(Paint)。
  当改动了可见样式后,就需要重新计算,会引发 repaint。
  由于元素的布局信息也属于可见样式,所以 reflow 一定会引起 repaint。

5.为什么 transform 的效率高?
  因为 transform 既不会影响布局也不会影响绘制指令,它影响的只是渲染流程的最后一个「draw」阶
  段由于 draw 阶段在合成线程中,所以 transform 的变化几乎不会影响渲染主线程。反之,渲染主线
  程无论如何忙碌,也不会影响 transform 的变化。

大厂面试题分享 面试题库

前后端面试题库 (面试必备) 推荐:★★★★★

地址:前端面试题库  web前端面试题库 VS java后端面试题库大全

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

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

相关文章

新书上市 | 从大脑认知开始,全方面提高编程能力,助你摆脱“GPT焦虑症”

目录 一、ChatGPT火爆全网二、《程序员超强大脑》三、本书内容四、本书特色五、作译者简介1、费莉安赫尔曼斯(Felienne Hermans)2、蒋楠 大家好,我是哪吒。 🏆本文收录于,49天精通Java从入门到就业。 全网最细Java零…

程序人生-Hello’s P2P

摘要 本文讨论了与编程和软件开发相关的几个关键概念和过程。首先介绍了链接的概念和作用,它是将代码和数据片段组合成单一文件的过程,使得分离编译成为可能,从而可以更好地管理和修改模块。接下来探讨了进程的概念和作用,进程是正…

图像数据处理

文章目录 1:TFRecords1-1 将MNIST数据集转换成TFRecord格式1-2 读取TFRecord文件中的数据 2:图像数据的预处理2-1 处理图像编码2-2 调整图像大小2-3 剪裁和填充2-4 按比例剪裁2-5 图像翻转2-6 图像亮度调整2-7 图像对比度调整2-8 图像色相调整2-9 图像饱…

chatgpt赋能Python-python_99乘法

Python编程实现——99乘法表的生成 Python编程语言是一种高级程序设计语言,具有简单易学、可移植性强、功能强大等特点,受到广大开发者的喜爱。Python可以被应用于网站开发、数据分析、人工智能、机器学习等多个领域。而在Python编程中,生成…

《程序员面试金典(第6版)》面试题 02.06. 回文链表(双指针(快慢指针),查找链表中间节点,反转链表)

题目描述 编写一个函数,检查输入的链表是否是回文的。 题目传送门~:面试题 02.06. 回文链表 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进…

蓝桥杯单片机串口通信学习提升笔记——部分2

今日继续学习提升蓝桥杯国赛能力水平。 有道是:卜心事、灯花无语,百感孤单,鸳被羞展...... 梦方圆,又丛钟、声声惊断。 诗人杨玉衔孤单影只,偏偏又多遭磨难,一路坎坷...... 正如我近日来学习提升串口通信…

数据结构学习分享之链式二叉树(一)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:数据结构学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你了解更多数据结构的知识   🔝🔝 1. 前言 在学习链式二叉树…

【Linux】shell编程—awk编辑器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、awk编辑器1.工作流程3.常用选项 二、awk的基础用法1.输出文件中的某一列2.根据特定条件筛选数据3.按照分隔符进行切割4.在匹配到特定字符串时执行操作5.BEGIN打…

chatgpt赋能Python-pythonwxpy

Python的wxpy模块:一款强大的微信机器人框架 在当今数字时代,微信已经成为了大家日常生活中不可缺少的应用。wxpy是一款使用Python语言的微信机器人框架,可以帮助用户实现诸如自动回复、消息提醒、定时发送消息等自动化操作。它的易用性、强…

(5)---STM32 的时钟系统

目录 1.时钟基本概念 时钟源常见振荡器 振荡电路 晶体振荡器 RC振荡器 2.G030时钟源 3.时钟树 4.STM32CubeMX时钟树配置 1.时钟基本概念 1) 时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作, 外设部件…

基于redis客户端缓存机制实现本地缓存

文章目录 前言一、本地缓存和分布式缓存二、redis客户端缓存机制1.客户端缓存实现原理普通模式广播模式重定向模式redirect 2.优势和误区3.客户端缓存机制请求流程 三、项目实战1.引入依赖2.redis连接属性配置3.开启客户端缓存4.使用本地缓存5.测试 总结 前言 采用缓存一直是我…

VMware ESXi 6.0 U3 Final - ESXi 6 系列最终版下载

VMware ESXi 6.0 U3 Final - ESXi 6 系列最终版下载 VMware ESXi 6 Standard 请访问原文链接:https://sysin.org/blog/vmware-esxi-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org VersionRelease NameRelease …

RLHF中的PPO算法原理及其实现

RLHF中的PPO算法原理及其实现 ChatGPT是基于InstructGPT实现的多轮对话生成式大模型。ChatGPT主要涉及到的技术包括: 指令微调(Instruction-tuning);因果推断(Causal Language Modeling);人类…

从零开始Vue3+Element Plus后台管理系统(十五)——多语言国际化vue I18n

i18n国际化的内容比较多,写文章的时间也用得比较长,从上周五开始到本周一,断断续续完成了。 虽然实际工作中很多项目都不需要国际化,但是了解国际化的用法还是很有必要的。 i18n Vue I18n 是 Vue.js 的国际化插件。它可以轻松地…

PFC-FLAC3D Coupling Examples

目录 PFC-FLAC3D Coupling Examples Punch Indentation of a Bonded Material Sleeved Triaxial Test of a Bonded Material 命令流 结果 PFC-FLAC3D Coupling Examples Punch Indentation of a Bonded Material 这个例子展示了一个粘合颗粒模型(BPM&#xff0…

项目经历该如何写?

大家好,我是帅地。 这不春招来了吗,帮训练营的帅友们修改了很多简,其中问题最多的就是项目经历 专业技能这块了,特别是项目经历这块,很多人写了一大堆描述功能描述,但是自己具体干了什么却没怎么写&#…

研发工程师玩转Kubernetes——使用Deployment进行多副本维护

多副本维护是指,对一组在任何时候都处于运行状态的 Pod 副本的稳定集合进行维护。说的直白点,就是保证某种的Pod数量会被自动维持——增加了该类Pod会自动删除多余的,减少了该类Pod会自动新增以弥补,以保证Pod数量不变。 Kubernet…

day37_Tomcat_Maven

今日内容 一、Maven 二、Tomcat 一、Maven 1.1 引言 项目管理问题 项目中jar包资源越来越多,jar包的管理越来越沉重。 繁琐 要为每个项目手动导入所需的jar,需要搜集全部jar 复杂 项目中的jar如果需要版本升级,就需要再重新搜集jar 冗余 相…

基于Spring-动态调整线程池阻塞队列长度

最近在做一个动态线程池的组件,遇到了关于阻塞队列长度刷新的问题,所以记录下来,很有意思 我们都知道常用线程池分为二类,Spring-ThreadPoolTaskExecutor和JDK-ThreadPoolExecutor的,当然了Spring也是基于JDK做一步封装&#xff0…

​数据库原理及应用上机(实验四 SQL连接查询)

✨作者:命运之光 ✨专栏:数据库原理及应用上机实验 目录 ✨一、实验目的和要求 ✨二、实验内容及步骤 ✨三.实验结果 ✨四、实验总结 🍓🍓前言: 数据库原理及应用上机实验报告的一个简单整理后期还会不…