博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
web解析过程
阅读量:6647 次
发布时间:2019-06-25

本文共 1037 字,大约阅读时间需要 3 分钟。

浏览器渲染原理

浏览器渲染

DOM解析

DOM树构建

过程:
1.根据HTML文档的内容,根据标签进行分词Token
2.根据Token生产对应的节点Node
3.将节点根据嵌套关系组合成为一棵对象节点树DOM

浏览器解析文档对象模型DOM是增量进行的,无需等待整个HTML文档加载完毕,便可以开始解析DOMCSSOM解析会阻塞HTML Parser;JavaScript脚本文件执行会阻塞HTML解析;CSS、JavaScript、Images和Font等静态资源的异步加载的,渲染页面与CSS解析与JavaScript执行会有相互的依赖

DOM树构建

DOM树构建2

css解析

CSSOM树的构建

CSSOM的解析依赖于选择器,选择器的匹配是从内到外的。所以选择器嵌套层次越深,匹配的时间会越长。

CSSOM只解析可视部分body标签中的内容,将所有匹配的元素共同构建一个CSSOM树,从根节点一次向下,所有节点的属性向下继承

图片描述

RenderTree树的构建

利用DOM和CSSOM组合构建生成RenderTree,对应Recaculate Style

RenderTree中包含所有渲染网页必须的节点无需渲染的节点不会被添加到RenderTree中,如head和display:none;的节点visibility: hidden;的节点会添加到RenderTree中

图片描述

浏览器通过GET请求获取网页HTML,同时将增量解析HTML文档,生成DOM树

解析DOM节点树时,对于需要加载的资源全部执行异步加载,但是CSS的解析、JavaScript的执行与font文件的下载会阻塞HTML Parser
局部DOM树与CSSOM树构建完成后,立即组装RenderTree进行渲染

图片描述

浏览器渲染页面的时机

增量解析解析DOM树,并且完成相应CSSOM解析后(RenderTree依赖于DOM树,CSSOM树),开始直接渲染页面。

4.2 CSS加载会阻塞初次渲染

图片描述

对于首页无关的样式,需要使用适当的方式避免其阻塞初次渲染:

document.write()会阻塞页面初次渲染

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

图片描述

图片描述
图片描述
图片描述

图片描述

图片描述

图片描述
图片描述
图片描述

图片描述

图片描述
图片描述
图片描述

哎呀文章有点乱了

转载地址:http://vsyto.baihongyu.com/

你可能感兴趣的文章
InfoQ宣布成立CNUT容器技术俱乐部 欲连接中国容器社区
查看>>
Netflix如何设计一个能满足5倍增长量的时序数据存储新架构?
查看>>
微软正式发布PowerShell Core 6.0
查看>>
Nexus指南已经发布
查看>>
如何在复杂的分布式系统中做测试
查看>>
Hazelcast发布开源流处理引擎Jet
查看>>
Paket:一个面向.NET的包管理器
查看>>
关于Mybatis拦截器对结果集的拦截
查看>>
微服务通信策略
查看>>
Facebook开源分布式日志存储系统LogDevice
查看>>
Netty和RPC框架线程模型分析
查看>>
一个月6次泄露,为啥大家用Elasticsearch总不设密码?
查看>>
中台之上(七):不神秘但很麻烦的业务架构落地过程
查看>>
明文存密码成惯例?Facebook 6 亿用户密码可被 2 万员工直接看
查看>>
Linus发布Linux 5.0 rc1版本,为原来4.21版本
查看>>
腾讯大规模分布式机器学习系统无量是如何进行技术选型的?
查看>>
性能之巅:Linux网络性能分析工具
查看>>
敏捷组织中项目管理办公室(PMO)的角色
查看>>
V8提升异步性能:JavaScript一大痛点得以解决
查看>>
Confluent平台5.0支持LDAP授权及用于IoT集成的MQTT代理
查看>>