《当浏览器地址栏输入URL并回车后,发生了什么?》 关键渲染路径

关键渲染路径就是描述浏览器从HTML、CSS和Javascript字节开始,到如何使用HTML、CSS和Javascript在屏幕上渲染像素的中间过程。

全景图

  • DOM 处理HTML标记并构建DOM树
  •  JavaScript
    
  • CSSOM 处理CSS标记并构建CSSOM树
  • Render Tree 将DOM与CSSOM合并成一个渲染树
  • Layout 根据渲染树来布局
  • Paint 将各个节点绘制到屏幕上

文档对象模型

DOM树的构建流程:字节》字符》标签对》节点》对象模型

这个过程在浏览器中叫做"Parse HTML"。

CSS 对象模型(CSSOM)

获取了DOM内容,还需要展示这些内容,浏览器需要构建CSS对象模型,浏览器在解析DOM时遇到了link标签,如果是使用的外部样式资源,浏览器回向外部请求样式资源,然后进行后续的DOM构建工作。

CSS被视为阻塞渲染的资源,这意味着浏览器将不会渲染任何内容,需要等待CSS对象模型构建完毕再渲染。

CSSOM的构建过程:字节》字符》令牌》节点》CSS对象模型

转化好的树形结构让CSS有层级继承关系,子节点会继承父节点的样式。

CSSOM运算性能消耗比较大,写样式尽量保证层级扁平,减少过度层叠。

DOM + CSSOM = 渲染树

渲染树和DOM树不同,渲染树只会捕获页面上可见的元素。像Header标签内的元素 或者display: none的元素不会放在渲染树中。

渲染树的构建会从body根节点开始遍历,对于不可见节点会忽略。然后在CSSOM中找到每个对应节点的样式规则并应用。最后输出的渲染树会包含所有可见内容和样式信息。

布局和绘制

有了渲染树,浏览器会进入布局和绘制阶段。

布局:每个元素的大小和位置和尺寸。
绘制:将渲染树转换成屏幕上的像素。

当DOM或者CSSOM发生变化的时候,浏览器就需要再执行一次关键渲染路径的步骤。

Javascript

js在关键渲染路径中起到举足轻重的作用。脚本在文档的何处插入,就在何处执行。

当HTML解析过程中遇到一个script标记时,它会暂停DOM构建,将控制权移交给Javascript引擎。等js引擎运行完毕,浏览器再从中断的地方恢复DOM构建。也就是说,执行内联的js会阻塞页面的首次渲染。

如果遇到外部引入的js,浏览器会渲染阻塞直到write.js的请求返回后,并执行js后。才会继续渲染。

link的请求不仅阻塞后面的渲染,还阻塞来DOM的构建。

对于常见的页面结构。js和css资源的请求是并行的,但仍然需要等到cssom构建完成之后,js才可以执行,然后在后面的渲染工作。当DOM、CSSOM、和Javascript执行之间有大量的依赖关系时,就很可能导致浏览器在处理及渲染网页时出现延迟。

优化策略

第一步,分析网址渲染状况

Performance中的四条竖线分别是什么含义?

  1. 绿色竖线,代表First Paint, 即浏览器开始进行像素的绘制。
  2. 黄色竖线,代表First Meaningful Paint (首次有效绘制) 用户可以开始看到部分内容,但是绘制仍在继续
  3. 蓝色竖线,代表大家比较熟悉的DOMContentLoaded
  4. 红色竖线,代表load,页面加载完成

优秀的网址都能够把“首次有效渲染”做到1秒之内完成,这样能够让用户更快的看到所请求的页面得到响应。

第二步,分析关键渲染路径

我通常关注的三个点:

  1. 页面首次渲染需要的关键资源数量
  2. 关键资源的大小
  3. 关键渲染路径的往返次数(Roundtrip)

策略:减少关键资源数量,降低资源大小,减少关键路径的往返次数

主站图片请求太泛滥了

根据分析采取优化手段

1.减少关键资源的大小

去除无用的代码和注释,最小化代码

2.延迟JavaScript非阻塞资源加载
js和css都是阻塞渲染的资源,对于首次渲染没有起到关键作用的代码,我们可以延迟它的加载,让它脱离关键渲染路径。
将js放置在body的底部
非阻塞渲染的js,我们应该采用异步的方式加载。

<script async src="script.js"></script>
<script defer src="myscript.js"></script>

async defer???

async 不适合包含有Dom操作的js文件
defer html 的解析和对js资源的网络请求是并行的,但它会等到html解析完成之后,才执行脚本。

3.尽早按需加载CSS
页面应该只引用与该页面相关的样式文件
避免在首次渲染的css的样式中使用@import指令,因为它只有在继续完成带有@import的资源后,会重新请求,从而增加了关键渲染路径的往返次数。

4.内联CSS来提高渲染性能
在head内联样式:google 百度 淘宝 京东

5.一个神奇的数字14kb
http的传输层协议是Tcp,tcp协议有一个慢启动的过程,即它在第一次传递数据时,只能同时传递14kb的数块,所以当数据超过14kb时,tcp协议传递数据实际是多次的往返。如果能够将渲染所需要的资源控制在14kb之内,那么就能tcp协议启动时,一次完成数据的传递。

其他web资源和关键渲染路径的关系

图片不是阻塞渲染的资源,它的痛点主要是质量和资源大小的权衡,以及请求数量带来的性能消耗。

主站一定要引入雪碧图,网络字体需要了解。

总结

优化关键渲染路径的最终目的是优先显示和用户操作相关的内容,减少低优先级资源对浏览器渲染的阻塞,从而尽早显示用户真正关心的关键内容。页面性能就是用户体验的一个重要纬度,常识用感性的思维去思考理性的代码,也许真的能受益不少。

浏览器渲染路径的精品文章,需要再看两边笔记来吸收。

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

推荐阅读更多精彩内容