js阻塞dom的构建 && CSS通过js来阻塞DOM的构建 && async、defer

本文探讨JavaScript如何阻塞DOM构建,以及CSS如何通过JS影响DOM构建。CSS加载不会阻塞DOM解析,但可能通过JS阻塞。JavaScript的加载和执行会阻塞DOM解析和渲染。异步加载JavaScript时,defer与async有区别,前者在DOMContentLoaded前执行,后者下载完成后立即执行。浏览器加载ES6模块类似defer,都是异步的。
摘要由CSDN通过智能技术生成

js阻塞dom的构建 && CSS通过js来阻塞DOM的构建

  • JavaScript脚本由于可能会修改DOM,因此会阻塞DOM的构建,这一点我们都知道;而CSS并不会操作或者改变DOM,因此通常我们认为CSS不会影响DOM的构建,只会影响后续的布局、绘制等过程,即会影响DOM的渲染。但其实CSS可以通过JavaScript来阻塞DOM的构建。
    因为JavaScript是可以改变样式的,也就是具有修改CSS规则树的能力,而JavaScript脚本里是否有改变样式的操作,这一点在执行JavaScript之前是不可知的。因此,为保证JavaScript脚本的正确执行,在执行JavaScript之前,CSS规则树必须要先准备好(不然万一有修改CSS的操作呢)。
    也就是说,若在构建DOM的中途存在阻塞DOM构建的JavaScript脚本,而此页面中还包含了外部 CSS 文件的引用,那么此时就需要等目前的CSS规则树(基于目前生成完的部分DOM树)构建完毕后,再开始JavaScript脚本的执行,等一切结束了,再继续DOM的构建。

  • UI线程与JS线程是互斥的,因为JS运行结果会影响到UI线程的结果,当JS线程运行的时候,UI线程处于冻结状态。(现在浏览器可能对某些事件做了特殊处理,比如监听了scroll事件,在滚动时还是能够流畅的播放动画)。

DOM与CSS
  • 没有js的理想情况下,html与css会并行解析,分别生成DOM与CSSOM
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值