浏览器的渲染过程解析
文章目录
- 浏览器渲染进程有哪些?
- 浏览器的渲染过程
浏览器渲染进程有哪些?
- GUI线程:负责渲染浏览器页面,解析html,css,构建DOM树,CSS规则树,渲染树和绘制页面,当界面需要重绘或某种操作引发回流,该线程就会执行
- JS引擎线程:负责处理javaScript脚本,解析javaScript脚本,执行代码
- 事件触发线程:用开控制事件循环,当JS引擎执行代码块如setTimeOut时,会将对应任务添加到事件触发线程中去,当对应的事件符合触发条件被触发时,该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理
- 定时器触发进程:即setTimeOut和setInterval所在的进程
- 异步http请求线程:XMLHttpRequest连接后通过浏览器新开一个线程请求;检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将回调函数放入事件队列中,等待JS引擎空闲后执行;
浏览器的渲染过程
步骤:
- 首先解析收到的文档
- html代码会被解析成DOM树
- css代码会被解析成css规则树
- DOM树和css规则树需要结合形成渲染树,此时的渲染树并没有位置和大小,所以会根据渲染树进行布局(也叫做回流)
- 最后在浏览器绘制显示

在这一过程中,
我们有可能会遇到js去操作DOM的情况,所以
问题一:当浏览器渲染过程中遇到js文件该如何处理?
首先我们要知道javaScript的加载,解析与执行是会阻碍文档的解析的当在渲染过程中遇到了js文件,浏览器是会暂停文档的解析,把控制权交给javaScript引擎,等到javaScript引擎运行完毕才会继续解析文档也就是说,我们要是想首屏渲染的越快,就越不应该把js代码放在首屏加载,这也是为什么建议把<script>标签放在body底部的原因
当然是不是就不能把<script>标签放在前面?也不是,我们可以通过async或者defer属性去改变
说完js文件,那css文件的时候又会不会影响文档的解析呢?
同样是会的
我们有时候会通过js代码区操作元素的样式,在css规则树还没有完全构建的时候,又想在此时去运行脚本,显然这会导致很多问题,所以浏览器将延迟javaScript脚本执行和文档的解析,直至其完成css规则树的下载和构建,也就是说,运行脚本的过程中遇到css样式还没构建完全的情况会先暂停js的执行和文档的解析,浏览器会先去下载和构建css规则树,然后再执行js,最后再继续文档解析
扩展:
1:(针对javaScript)async和defer属性的作用:
可以异步加载js文件
两者区别:
async:是 下载完成之后,立即异步加载,加载好后立即执行,多个带async属性的标签,不能保证加载的顺序defer:是在下载完成之后,立即异步加载。加载好后,如果DOM树还没构建好,则先等DOM树解析好再执行,如果DOM树已经准备好,就立即执行。多个带defer属性的标签会按照顺序执行
2:(针对css)link,@import,内联样式
link和@import都是外部导入样式
link:浏览器会派发一个新的线程(HTTP线程)去加载资源文件,与此同时GUI渲染线程会继续向下渲染代码@import:GUI渲染线程会暂停渲染代码,去服务器加载资源文件,资源文件没有返回之前不会继续渲染style:GUI直接渲染
相关文章:
浏览器的渲染过程解析
文章目录浏览器渲染进程有哪些?浏览器的渲染过程浏览器渲染进程有哪些? GUI线程:负责渲染浏览器页面,解析html,css,构建DOM树,CSS规则树,渲染树和绘制页面,当界面需要重…...
【C++容器】std::fstream读写文件错误【2023.03.03】
std::fstream使用细节 1.文件不存不支持时打开文件模式不得有ios::in • 如果文件不存在且打开时包括了ios::in模式则打开文件会失败。 fstream m_f;m_f.open("d://123.csv", ios::in | ios::out | ios::binary);//文件不存在则会打开失败• 我这边尝试行得通的做…...
UVM实战--带有寄存器的加法器
一.整体的设计结构图 这里将DUT换成加法器,可以理解为之前UVM加法器加上寄存器,这里总线的功能不做修改,目的看代码的移植那些部分需要修改。 二.各个组件代码详解 2.1 DUT module dut( input clk, input rst_n, input…...
笔记--学习mini3d代码
主要是记录学习mini3d代码时,查的资料; 从github下载的代码: GitHub - skywind3000/mini3d: 3D Software Renderer in 700 Lines !!3D Software Renderer in 700 Lines !! Contribute to skywind3000/mini3d development by creating an a…...
图片服务器
文章目录一、项目简介二、功能及场景三、业务设计四、数据库设计准备图片表准备实体类五、API设计常用功能封装文件上传文件上传获取图片列表接口获取图片内容删除图片接口六、项目优化七、测试自动化测试测试用例一、项目简介 图片服务器:解决项目中插入图片的问题…...
【JAVA程序设计】【C00110】基于SSM(非maven)的车辆维修管理系统
基于SSM(非maven)的车辆维修管理系统项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架非maven开发的车辆维修管理系统共分为三个角色:管理员、用户 管理员角色包含以下功能: 查看用户、添加用户、查看车辆信息、故…...
微积分小课堂:用动态的眼光去找问题的最优解(最大值/最小值)【中学里的解题技巧】
文章目录 引言I 最优化问题1.1 不同形式的最优化1.2 用动态的眼光去找问题的最优解引言 把比较数大小的问题,变成了寻找函数变化拐点的问题,将这两个问题等同起来,需要发明一种工具,叫做导数。有了导数这个工具,求最大值问题就变成了解方程的问题。 用变化的眼光找到最优…...
网络爬虫和相关工具
在理想的状态下,所有ICP(Internet Content Provider)都应该为自己的网站提供API接口来共享它们允许其他程序获取的数据,在这种情况下爬虫就不是必需品,国内比较有名的电商平台(如淘宝、京东等)、…...
OSSFs挂载工具简介
OSSFs挂载工具 OSSFs挂载工具简介 ossfs允许您在Linux系统中将对象存储OSS的存储空间(Bucket)挂载到本地文件系统。挂载完成后,您能够像操作本地文件一样操作OSS的对象(Object),从而实现数据共享。 …...
Spring 容器创建初始化,获取bean流程分析
Spring 容器创建初始化,获取bean流程分析 Spring 容器创建初始化 流程分析 1、首先读取bean.xml 文件 2、扫描指定的包 com.hspedu.spring.component 2.1、扫描包,得到bean的class对象,排除包下不是bean的 2.2、扫描将bean信息封装BeanDef…...
无聊小知识.03 Springboot starter配置自动提示
1、前言Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?2、Springboot配置自动提示其实IDE是通过读取配置信息的元数据而实现自动提示的。S…...
2023-03-03 mysql-join类别-分析
目录 摘要: mysql版本: DDL: 表结构: 插入数据: JOIN: 一. SELECT 二. INNER JOIN...
Saleen 系列来袭!
由 Ghostopunch 创作👻🥊 Ghostpunch 将 Saleen Automotive 带入 The Sandbox 元宇宙! 是 Saleen Automotive 于 1984 年由汽车界的梦想家 Steve Saleen 创立,目标是将经过比赛验证的性能带入大街小巷和元宇宙……😉 5…...
如何优雅地处理Java中的null值?使用Optional类来实现!
当我们在Java编程时,经常会遇到处理null值的问题。在Java 8中,引入了一个Optional类来解决这个问题。Optional类可以看作是一个容器,用于包装一个可能为null的值。它提供了一些方便的方法,以优雅地处理null值的情况。 下面我将详…...
巾帼绽芬芳 一起向未来(中篇)
编者按:为了隆重纪念纪念“三八”国际妇女节113周年,快来与你全方位、多层次分享交流“三八”国际妇女节的前世今生。分上篇(节日简介、节日发展和节日意义)、中篇(节日活动宗旨和世界各国庆祝方式)和下篇&…...
espnet training
from:ESPnet2 — ESPnet 202301 documentation from :Change the configuration for training — ESPnet 202301 documentation 训练完之后微调的命令: ./run.sh --stage 11 --ngpu 1 --asr_args "--max_epoch 205 --optim_conf lr=0.1 --resume true" --asr_exp…...
qsort函数的应用以及模拟实现
前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍库函数qsort函数的模拟实现和应用 金句分享: ✨追…...
【iobit 软件】家族系列 - 正版激活码
装机必备iobit系列软件 - 激活码获取看最后 第一款、Advanced SystemCare 16 您需要的人工智能驱动的PC优化器,以释放磁盘空间,加速PC并保护在线隐私。 功能特点: 1. 系统清理与优化:通过清除系统垃圾文件、注册表信息、无用文…...
ACM-大一训练第三周(Floyd算法+并查集算法专题训练)
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:ACM周训练题目合集.CSDN 💬总结:…...
taobao.item.sku.update( 更新SKU信息 )
¥开放平台免费API必须用户授权 *更新一个sku的数据 *需要更新的sku通过属性properties进行匹配查找 *商品的数量和价格必须大于等于0 *sku记录会更新到指定的num_iid对应的商品中 *num_iid对应的商品必须属于当前的会话用户 公共参数 请求地址: HTTP地址 http://gw.…...
期刊名称缩写标准化工具journal-abbrev:提升科研文献管理效率
1. 项目概述与核心价值如果你和我一样,长期在学术圈子里摸爬滚打,或者需要处理大量的文献引用,那你一定对期刊名称缩写这件事又爱又恨。爱的是,它能让你的参考文献列表变得紧凑、专业;恨的是,你永远记不住“…...
Maya路径动画参数详解:从‘连接到运动路径’到‘世界上方向类型’,彻底搞懂每个选项
Maya路径动画参数深度解析:从基础操作到高级控制 在三维动画制作中,路径动画是一种让对象沿着预定轨迹运动的强大工具。与关键帧动画相比,路径动画特别适合需要精确控制运动轨迹的场景,比如飞行的无人机、行驶的汽车或者摄像机运动…...
从真值到补码:计算机如何用0和1表示正负与运算
1. 为什么计算机需要表示负数? 当你用计算器做减法时,可能从没想过计算机内部其实只会做加法。我第一次接触这个概念时也很惊讶——原来计算机用补码表示负数,就是为了把减法变成加法运算。这就像魔术师的手法,看似简单的0和1背后…...
从零构建板球控制系统:PID算法与视觉定位实战
1. 板球控制系统入门指南 第一次听说板球控制系统时,你可能和我当初一样充满好奇:这个小玩意儿到底是怎么工作的?简单来说,它就是一个能自动控制小球在平板上运动的智能系统。想象一下,你把一个白色小球放在黑色平板上…...
基于容器化技术的高交互蜜罐系统设计与实战部署
1. 项目概述:一个高交互的蜜罐系统最近在整理安全研究工具链时,又翻出了beelzebub这个项目。它不是一个新面孔,但在开源蜜罐领域,其设计理念和实现方式一直让我觉得很有意思。简单来说,beelzebub是一个用 Go 语言编写的…...
SDF不只是图形学:用距离函数解决游戏开发中的5个实际问题(附Unity/C#示例)
SDF不只是图形学:用距离函数解决游戏开发中的5个实际问题(附Unity/C#示例) 在游戏开发中,我们经常需要处理各种形状的检测和计算。传统方法如多边形碰撞检测或射线检测虽然有效,但在某些场景下性能开销较大。符号距离函…...
保姆级教程:在Windows 10上用VS2017和Qt 5.12.6从源码编译QGroundControl 4.0.0
从零开始:Windows 10下使用VS2017与Qt 5.12.6编译QGroundControl 4.0.0全指南 对于无人机开发爱好者而言,搭建一个稳定可靠的地面站开发环境是迈向自主开发的第一步。QGroundControl(QGC)作为一款开源的无人机地面站软件…...
从手机录屏到游戏直播:搞懂FPS和分辨率,让你的视频告别卡顿和模糊
从手机录屏到游戏直播:搞懂FPS和分辨率,让你的视频告别卡顿和模糊 当你用手机录制一段《原神》战斗画面,上传到B站后却发现视频卡成PPT;或是用OBS直播《王者荣耀》时,观众总抱怨画面模糊得像打了马赛克——这些问题背后…...
深入探讨.NET 6中WeakHandle的垃圾回收机制
在.NET框架中,垃圾回收(Garbage Collection, GC)是管理内存的重要机制之一。而在.NET 6版本中,我们发现了一个关于弱引用(Weak Reference)的有趣现象。下面我们将通过一个实例来详细分析这个问题。 问题描述 以下是一个简单的C#代码示例,展示了在.NET 6下使用GCHandle…...
React Native跨平台语音AI助手开发:OpenClaw Voice架构与实战
1. 项目概述:OpenClaw Voice,一个为移动端优化的语音优先AI助手客户端如果你和我一样,经常在移动场景下需要与AI助手进行快速交互,比如在通勤路上、散步时,或者双手被占用时,那么你肯定对在手机上打字输入感…...
