js和css对DOM解析和页面渲染的影响

本文探讨CSS加载对DOM解析的影响,指出CSS阻塞DOM渲染但不阻塞其解析,并比较async与defer的异步特性。同时,深入解析了JS的阻塞作用及其在DOM和CSS加载中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈CSS到底会不会阻塞页面渲染
script脚本阻塞的探究、异步属性async和defer的区别
webkit渲染过程
html转换成抽象语法树,AST介绍:解析html生成语法树
浏览器DOM渲染及阻塞问题


从上面两个流程图我们可以看出来,浏览器渲染的流程如下:

HTML解析文件,生成DOM Tree,解析CSS文件生成CSSOM Tree
将Dom Tree和CSSOM Tree结合,生成Render Tree(渲染树)
根据Render Tree渲染绘制,将像素渲染到屏幕上。

从流程我们可以看出来

DOM解析和CSS解析是两个并行的进程,所以这也解释了为什么CSS加载不会阻塞DOM的解析。
然而,由于Render Tree是依赖于DOM Tree和CSSOM Tree的,所以他必须等待到CSSOM Tree构建完成,也就是CSS资源加载完成(或者CSS资源加载失败)后,才能开始渲染。因此,CSS加载是会阻塞Dom的渲染的。
由于js可能会操作之前的Dom节点和css样式,因此浏览器会维持html中css和js的顺序。因此,样式表会在后面的js执行前先加载执行完毕。所以css会阻塞后面js的执行。

总结:

    1. js在任何时候都会阻塞dom,通常是将js放在body结束的时候,这样会将所页面渲染完成之后再执行js。有利于用户的体验。async是异步加载js,加载完成立刻执行。defer是异步加载js,但是加载完成之后会等待一个事件dom解析完成之后执行。
    2. css的加载会阻塞js的执行,会阻塞页面的渲染,但是不会阻塞DOM的解析。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值