网页的渲染机制

渲染机制概述

解析 HTML 标签, 构建 DOM 树
解析 CSS 标签, 构建 CSSOM 树
把 DOM 和 CSSOM 组合成 渲染树 (render tree)
在渲染树的基础上进行布局, 计算每个节点的几何结构
把每个节点绘制到屏幕上 (painting)

过程分析

拿到HTML代码后,浏览器开始解析HTML代码构建DOM树。
这个过程是根据代码自上而下的。
当解析到style 或者 link外链css时,会阻塞停止HTML的解析,DOM树的构建。
等请求下载解析css并且CSSOM构建完毕时,才会继续解析后面的HTML代码。


当继续解析到script 或者 外链js脚本时,会阻塞停止HTML的解析,DOM树的构建。



注意:



然后继续解析HTML。每解析完一个DOM 就结合CSSOM 绘制好(不同浏览器处理方式不同)。
遇到图片src就建立请求获取图片,但是不等待继续解析后面的HTML(异步并行过程),等到图片获取到以后再回头Reflow,如果没有影响布局则Repaint。

(1)Reflow(回流):浏览器要花时间去渲染,当它发现了某个部分发生了变化影响了布局,那就需要倒回去重新渲染。
(2)Repaint(重绘):如果只是改变了某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性,将只会引起浏览器的repaint,重画某一部分。

等到所有标签解析完毕则渲染结束。

提高网页加载速度 和避免异常情况的处理方法

CSS

为了提高网页加载速度,对于首页无关的样式,需要使用适当的方式避免其阻塞初次渲染:

  • 使用media=print媒体查询,虽然加载样式表,但只针对打印时才应用该样式,不会阻塞初次渲染。
  • 通过DOMAPI引入CSS,可以避免阻塞。
  • CSS中<link rel="preload" href="index_print.css" as="style" onload="this.rel='stylesheet'">。



另:css选择器的机制是从右往左,所以应避免过多的选择器嵌套

JS

JS脚本执行会阻塞HTML Parser;
CSS解析会阻塞JS脚本执行:js可能会读、写CSSOM
虽然JS会阻塞HTML Parser解析;但是浏览器的资源异步加载机制Preload会异步加载head标签内的资源

非关键JS资源解析阻塞的优化方案

  • 将JS资源文件放在文档底部,延迟JS的执行(但是存在必须解析完HTML才能加载JS资源,相较于head标签中加载会慢)
  • 使用defer延迟脚本执行:scipt标签的defer属性,脚本会在HTML文档解析完毕后再开始执行;被defer的脚本在执行时严格按照HTML文档中出现的顺序执行---优势可以提早加载JS资源,但是解析完HTML再执行
  • 使用async异步执行脚本:
    -当script标签有async属性时,脚本执行不会阻塞HTML Parser,只要脚本加载完毕便开始执行
    被async的脚本,不会严格按照在HTML文档中的顺序执行
    async适用于无依赖的外部独立资源(注意不要错误操作状态)

font

img

图片资源的加载不会阻塞渲染,但是最好在HTML标签中设置图片的高度和宽度,可以在Layout时留出图片渲染的空间,避免页面的抖动

内容参考:https://segmentfault.com/a/1190000008693178?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly

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

推荐阅读更多精彩内容

  • CSS和JS在网页中的放置顺序是怎样的? CSS最好放入header中,即放在网页内容(html标签中包含的文字和...
    DCbryant阅读 286评论 0 0
  • 网页的基本组成结构 网页 = HTML + CSS + JavaScriptHTML:网页元素内容CSS: 控制网...
    Vincent_永阅读 397评论 0 0
  • 先了解几个基本概念: DOM Document Object Model,浏览器将HTML解析成树形的数据结构;输...
    饥人谷_tonya阅读 504评论 0 0
  • 1.CSS和JS在网页中的放置顺序 CSS需要放在head内,一般用link标签引入外部样式,或者直接将CSS写在...
    l_meng阅读 233评论 0 0
  • 今天买了一个大本本。因为前几天跟孩子同学的妈妈聊天说:她的孩子下学期就要去其他幼儿园去读了,说因为他哥哥也去更好的...
    米勒Li阅读 216评论 1 0