本文已参与『新人创作礼』活动,一起开启掘金创作之路
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情
简介
- Css加载不会阻塞
DOM
树的解析 - Css加载会阻塞
DOM
树的渲染 - Css加载会阻塞后面
javascript
语句的执行
渲染过程
- DOM树的解析和CSSOM树的解析过程是并发进行的,所以这就是为什么CSS的加载不会阻塞DOM树的解析
- 然而
Render
树是依赖于DOM树和CSSOM树结合生成的,所以他必须等待CSSOM树构建完成才可以,才会开始渲染,所以CSS加载会阻塞DOM渲染 - 由于javascript可能会操作
DOM
样式和Css
样式,因此浏览器会维持HTML
中Css
和javaScript
顺序;因此,样式表会在后面的javaScript
执行前先加载执行完毕,所以css会阻塞后面js的执行
DOMContentLoaded事件
IE6、IE7不支持DOMContentLoaded
,但它支持onreadystatechange
事件,该事件的目的是提供与文档或元素的加载状态有关的信息。
- 页面加载主要有两个事件 DOMContentLoaded 和onLoad
- onLoad: 等待页面全部资源 加载完成 后才会触发
- DOMContLoaded: 页面内容 解析完成 后触发
DOMContentLoaded结论
-
如果页面同时存在
Css
和javaScript
,并且存在javaScript
在Css
后面,则DOMContentLoaded
事件会在Css
加载完后才执行。 -
其他情况DOMContentLoaded都不会等待
Css
加载,并且DOMContentLoaded
事件也不会等待图片、视频等其他资源加载。
优化
- 使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间)
- 对CSS进行压缩(webpack,gulp等等)
- 使用缓存
- 减少
HTTP
请求,多个Css
文件合并 javaScript
引入放在页面底部,保证了兼容性的同时没有让脚本的加载阻塞到HTML
的解析,减少了白屏时间。
文章有错误或者遗漏地方的小伙伴可以在评论区评论哦~