06-浏览器渲染原理

news2024/11/16 1:58:08

什么是渲染?

 render,HTML字符串 --渲染--> 像素信息

URL地址是一个字符串,HTML、css、js都在里面

可以把渲染想象成一个函数,上代码:

function render (html) {
	/*  第一行
		第二行
	*/
	return pixels;
}

渲染时间点

从输入URL地址按下回车到显示页面,发生了什么?

重点是两部分,网络:拿HTML,渲染:渲染

渲染流水线

 

解析HTML、parse HTML

形成DOM树和CSSOM树

 

 

除了浏览器默认样式表之外,其他的JS都能操作

下载插件,可以在线观看Chrome源码

 搜索Chromium,复制网址

 

 这样就可以在线查看Chrome浏览器源码了

查看页面样式

 一般框架里用的比较多

/* 给页面所有div加边框 */
document.styleSheets[0].addRule('div', 'border: 2px solid #c00000 !important')

 

CSS代码不会阻塞html解析 ,因为他们处在不同的线程上

JS代码会阻塞html解析 ,遇到JS需要暂停,因为JS可能会修改DOM树

 样式计算 - Recalculate Style

 CSS属性值的计算过程,层叠,继承

 

 最终样式会把预设值变成绝对单位

比如颜色 "#f40" 变成  "rgb(255, 0, 22)"

或者 rem 变成  px

 获取最终样式

getComputedStyle()

位置和宽高是相对包含块来说的,相对第一个定位的元素,不一定是父元素,父元素没有会一直往外查找,直到有定位的包含块

 浏览器默认样式表规定head是隐藏的,它不会出现在布局树中,因为它没有几何信息

 

 

 

 

 layout布局树里面不是DOM对象,但是它可以间接拿到一些属性,比如

document.body.clientHeight
635
document.body.clientWidth
1275
document.body.offsetHeight
635

 分层 - Layer

 

 

 

 绘制 - Paint 

 

 

 分块 = Tiling  合成线程

 

 光栅化 - Raster

 

 

 

画 - Draw

 

 

 

 

面试题:浏览器是如何渲染页面的?

 

 

什么是reflow?

重新布局(排版)

改变几何信息都reflow

 

 

 

什么是repaint?

 

 

为什么transform

 

 

 

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

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

相关文章

【深入浅出 Spring Security(十二)】使用第三方(Github)授权登录

使用第三方(Github)授权登录 一、OAuth2 简单概述二、OAuth2 四种授权模式之授权码模式三、Github 授权登录准备工作创建 Spring Boot 项目Vue 测试代码测试效果 (Github授权登录的具体操作在目录第三“章”) 一、OAuth2 简单概述…

Spring Boot 优雅集成 Spring Security 5.7(安全框架)与 JWT(双令牌机制)

Spring Boot 集成 Spring Security (安全框架) 本章节将介绍 Spring Boot 集成 Spring Security 5.7(安全框架)。 🤖 Spring Boot 2.x 实践案例(代码仓库) 介绍 Spring Security 是一个能够为基…

【CSDN创作纪念日】——博客小梦的“256”鸭~

博客小梦的创作纪念日😎 前言🙌与CSDN的相遇浑水摸鱼的日常CSDN上的小小收获收获了 一群热爱编程,热爱创作的CSDN挚友创作上的小荣誉 憧憬未来 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭…

【Spring】— Spring MVC简单数据绑定(一)

目录 Spring MVC数据绑定1.数据绑定概述2.简单数据绑定2.1 绑定默认数据类型2.2 绑定简单数据类型 Spring MVC数据绑定 1.数据绑定概述 在执行程序时,Spring MVC根据客户端请求参数的不同将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将…

基于VMD-LSTM-IOWA-RBF的碳排放混合预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

第J3-1周:DenseNet算法 实现乳腺癌识别

目录 一、理论基础1.前言2.设计理念3.网络结构4.与其他算法效果对比 二、 前期准备1. 设置GPU2. 导入数据3. 划分数据集 三、搭建网络模型1. DenseLayer模块2. DenseBlock模块3. Transition模块4. 构建DenseNet5. 构建densenet121 四、 训练模型1. 编写训练函数2. 编写测试函数…

I/O多路复用+高性能网络模式

前言: 本篇文章将介绍客户端-服务端之间从最简单的Socket模型到I/O多路复用的模式演变过程,并介绍Reactor和Proactor两种高性能网络模式 文章内容摘自:小林Coding I/O多路复用高性能网络模式 . 传统Socket模型传统Socket模型的性能瓶颈多进程…

【Java基础学习打卡12】Java入门程序

目录 前言一、Java程序开发运行流程二、Java程序源代码编写三、Java程序源代码编译四、Java程序运行五、Java入门程序问题总结 前言 本文首先介绍Java程序开发运行基础流程,然后先进行程序源代码编写,然后对Java程序代码进行编译,最后要运行…

Python学习笔记(1)--环境搭建,开发工具PyCharm 安装及初步使用

传送门>B站黑马python入门教程 目录 1.Python环境安装搭建安装python基础包验证安装文件 2.hello world3.开发工具PyCharm 安装及初步使用安装基础设置 1.Python环境安装搭建 安装python基础包 首先,打开python 官网 https://www.python.org/ 下载windows版 下载后进行安装 …

Triton教程 --- 解耦后端和模型

Triton教程 — 解耦后端和模型 Triton系列教程: 快速开始利用Triton部署你自己的模型Triton架构模型仓库存储代理模型设置优化动态批处理速率限制器模型管理自定义算子 解耦后端和模型 Triton 可以支持为一个请求发送多个响应或为一个请求发送零个响应的后端和模型。 解耦的…

论文笔记--Prompt Consistency for Zero-Shot Task Generalization

论文笔记--Prompt Consistency for Zero-Shot Task Generalization 1. 文章简介2. 文章概括3 文章重点技术3.1 Prompt-based zero-shot task generalization3.2 Prompt Consistency Training3.3 如何防止遗忘和退化? 4. 文章亮点5. 原文传送门 1. 文章简介 标题&am…

【numpy模块上}——数据分析01

目录索引 介绍:用处与特点:构成:导包:创建数组: numpy常用方法:常用属性查看:*获取秩的大小:**获取数组形状:**获取元素个数:**获取元素类型:**获…

行为型设计模式10-解释器模式

🧑‍💻作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 解释器模式 1、解释器模式介绍 解释器模式(Interpreter Pattern)是一种行为设…

Kafka系列之:对源连接器的的Exactly-Once支持

Kafka系列之:对源连接器的的Exactly-Once支持 一、背景二、目标三、公共接口四、连接器 API 扩展五、REST API验证六、新指标七、计划变更八、任务计数记录九、重新平衡的准备十、源任务启动十一、领导者访问配置主题十二、用于隔离事务生产者的管理 API十三、解决了…

论文阅读 - SegFormer

文章目录 1 概述2 模型说明2.1 总体结构2.2 Hierarchical Transformer Encoder2.3 Lightweight All-MLP Decoder 3 SegFormer和SETR的比较参考资料 1 概述 图像分割任务和图像分类任务是非常相关的,前者是像素级别的分类,后者是图像级别的分类。基于分类…

不到3000块,搭建IT人的实验平台!性能可媲美服务器!

作为IT从业者,特别是运维这个岗位,没有自己的实验平台真的特别难受,那么如何搭建自己的实验平台呢?这是我最近思考并付诸实践的一个事情,最终找到了自己觉得比较可以的方案。 01 我的需求是什么? 大内存容量…

TypeScript——类(class)

ES6 中类的用法 下面我们先回顾一下 ES6 中类的用法,更详细的介绍可以参考 ECMAScript 6 入门 - Class 属性和方法 使用 class 定义类,使用 constructor 定义构造函数。 通过new生成新实例的时候,会自动调用构造函数。 class Person{con…

leetcode877. 石子游戏(动态规划-java)

石子游戏 leetcode877. 石子游戏题目描述暴力递归代码演示 动态规划 动态规划专题: leetcode877. 石子游戏 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/stone-game 题目描述 Alice 和 Bob 用几堆石子在做游戏。一共有…

HTTP与Fiddler使用

HTTP与Fiddler使用 HTTP与Fiddler使用FidderHTTP的报文结构:其他请求头User-agentReferer和OrigincookieHTTP状态码 HTTP与Fiddler使用 HTTP协议是使用十分广泛的应用层协议,也是一个可以由程序员进行设置的一个协议。该协议的结构规定了浏览器与万维网…

【C++】通讯录的基本实现,附有源码分享

目录 1、运行环境 2、系统实现功能 2.1菜单功能 2.2退出通讯录功能 2.3添加联系人功能 2.4显示联系人功能 2.5删除联系人功能 2.6查找联系人功能 2.7修改联系人功能 2.8清空联系人功能 2.9动态扩容功能 2.10选择优化功能 2.11文件操作 3、源码分享 1、运行环境 …