解析浏览器打开网页过程

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

进程与线程科学定义:

  • 进程 进程是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位)
  • 线程 线程是cpu是调度的最小单位 (线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程)

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

以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文件标签对并渲染,具体规则如下:
  • 1.解析到DOM(文档对象模型 Document Object Model)标签,置入DOM树,HTML标签对以栈的形式解析,解析到标签头先入栈并构成一个DOM节点,解析到该标签尾,则需要判断当前栈顶是不是该标签头,是则认为解析完毕出栈。因为HTML标签是成对出现的且标签对之间无法穿插只能是包含关系,所以以这种形式解析dom节点的话,必然会将其子节点全部解析完成才开始进行其兄弟节点的解析;
  • 2.解析到CSS标签(link),首先将CSS文件下载完毕,然后进行解析生成CSSOM(层叠样式表对象模型 Cascading Style Sheets Object Model)CSSOM和DOM是完全独立的数据模型 ,因此它们是彼此分开解析的 。 但是它们都具有相似的树结构 ,并且具有相同的目的:为浏览器提供一种结构,以呈现和标识页面上的不同元素。注意下载和解析CSS文件都会阻止页面渲染,从而阻塞JS运行,这是因为DOM 和 CSSOM 要最终合并成为 render tree 用于页面渲染,其中一项未解析完毕则无法正常渲染,而页面渲染和JS代码运行互斥,所以也阻塞JS运行。
  • 3.合成render tree,利用以获得的DOM 和 CSSOM 合成render tree,其中包含完整的界面展示信息。
  • 4.生成Layout布局阶段,生成盒模型,确定各节点大小位置层级等;
  • 5.进行painting绘制阶段,将各节点绘制到界面上(类似片元着色器)
  • 6.解析到JS标签,将JS文件下载完毕然后执行,此过程阻塞DOM解析和CSS解析,因为JS代码种可能对DOM和样式有操作,避免引起冲突。
注意上述解析规则并不是等待所有数据全部返回才开始解析,而是当它接收到可解析数据就会开始解析。


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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容