解析浏览器打开网页过程

2022-05-17  本文已影响0人  小陈wx

浏览器是什么,浏览器是用户用来查看网页的软件程序,它是由多个进程构成,那么什么是进程?什么又是线程呢?

进程与线程科学定义:

总的来说软件服务好比一座工厂,进程好比一个加工车间,而线程则是加工车间中的一条流水线,多条线程构成一个进程,多个进程构成一个软件服务,

以chorme浏览器为例,他分为Browser主进程,GPU进程,第三方插件进程、浏览器渲染进程。其中我们前端开发
人员最需要关注的是它的浏览器渲染进程,该进程主要由下列几个线程构成:

1.JS引擎线程;2.GUI渲染线程;3.事件触发线程;4.定时器触发线程;5,异步请求线程;

通常我们说JS是单线程运行的,是因为JS程序的可执行代码在JS引擎线程中执行,其中的异步任务会丢到其他的线程中执行,待拿到返回结果,再通知JS引擎线程运行其回调。需要注意的一点是GUI渲染进程和JS引擎互斥,一个运行另一个就需要挂起,他们中的一方要是运行的时间过长,则会引起程序的卡顿。

64bf928efc59f98184b77df2b6c15eba.png

打开网页的全过程:

1.在地址栏中输入URL;
2.对输入的URL进行DNS解析,获取目标服务器IP地址,优先浏览器DNS缓存查询>本地host文件查询,如没有则进行递归或迭代查询,本地区的域名服务器>根DNS域名服务器>顶级域名服务器>依次向下>>>;
3.像目标IP发送http请求;
4.建立tcp链接;
5.接受返回数据,(http1.1长链接,默认不会断开tcp握手)
6.浏览器渲染线程解析html文件,方向由上至下;
7. 解析HTML文件标签对并渲染,具体规则如下:
注意上述解析规则并不是等待所有数据全部返回才开始解析,而是当它接收到可解析数据就会开始解析。


CSS解析与JS代码执行都会阻塞渲染,他们阻塞关系如下:

CSS阻塞渲染规律:

1.CSS加载和解析不会阻塞DOM TREE构建,他们是两个并行的线程在处理;
2.CSS加载和解析会阻塞RENDER TREE合成,因为CSSOM是构成渲染树的一部分;
3.CSS加载和解析阻塞JS代码执行,因为JS代码与渲染互斥,可能有DOM操作或者样式操作上的冲突;

JS阻塞渲染规律:

1.JS加载和运行阻塞DOM TREE和RENDER TREE的构建;
2.JS执行需等待CSSOM构建完成;
3.上述2点可以理解为GUI线程与JS引擎线程互斥,在浏览器解析HTML文件并渲染的过程里,只有执行js代码交由JS主线程处理(异步任务除外),其他过程有GUI线程处理。

总结:日常盗图


51c3660d3f67948d4ec8279baad97d96.png
上一篇下一篇

猜你喜欢

热点阅读