CSS会阻塞DOM渲染吗?

CSS会阻塞DOM渲染吗?

面试中经常会问到的问题,今天刚好也读到这类的文章,简单记录一下

  1. CSS加载会阻塞DOM树的解析和渲染吗?
    结论如下:
     1.css加载不会阻塞DOM树的解析
     2.css加载会阻塞DOM树的渲染
     3.css加载会阻塞后面js语句的执行、
  1. 为什么会出现这种情况呢?我们通过图片进行解释吧。
    RUNOOB 图标
我们可以看到浏览器的渲染过程如下
HTML解析文件——>生成DOM树     ——
                              |——>结合生成Render树->渲染到屏幕
CSS解析文件 ——>生成CSSOM树  ——
  • DOM树的解析和CSSOM树的解析过程是并发进行的,所以这就是为什么CSS的加载不会阻塞DOM树的解析
  • 然而Render树是依赖于DOM树和CSSOM树结合生成的,所以他必须等待CSSOM树构建完成才可以,才会开始渲染,所以CSS加载会阻塞DOM渲染
  • 由于js可能会操作DOM样式和css样式,因此浏览器会维持html中css和js顺序;因此,样式表会在后面的js执行前先加载执行完毕,所以css会阻塞后面js的执行
  1. DOMContentLoaded
    今天算是第一次接触到这个页面时间,之前都是没有听过的,这里做简单了解
  • 页面加载主要有两个事件 DOMContentLoaded 和onLoad
  • onLoad: 等待页面全部资源 加载完成 后才会触发
  • DOMContLoaded: 页面内容 解析完成 后触发
  1. DOMContentLoaded结论
1.如果页面同时存在css和js,并且存在js在css后面,则DOMContentLoaded事件会在css加载完后才执行。
2.其他情况DOMContentLoaded都不会等待css加载,并且DOMContentLoaded事件也不会等待图片、视频等其他资源加载。
  1. 如何避免长时间的白屏,提高CSS加载速度
1.使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间)
2.对CSS进行压缩(webpack,gulp等等)
3.使用缓存
4.减少http请求,多个CSS文件合并
posted @ 2021-11-09 11:52  春天游泳。  阅读(588)  评论(0编辑  收藏  举报