什么会阻塞浏览器的渲染呢?css?js?

渲染引擎

一个渲染引擎主要包括:HTML解析器,CSS解析器,javascript引擎,布局layout模块,绘图模块

  • HTML解析器:解释HTML文档的解析器,主要作用是将HTML文本解释成DOM树
  • CSS解析器:它的作用是为DOM中的各个元素对象计算出样式信息,为布局提供基础设施
  • Javascript引擎:使用Javascript代码可以修改网页的内容,也能修改css的信息,javascript引擎能够解释javascript代码,并通过DOM接口和CSS树接口来修改网页内容和样式信息,从而改变渲染的结果
  • 布局(layout):在DOM创建之后,Webkit需要将其中的元素对象同样式信息结合起来,计算他们的大小位置等布局信息,形成一个能表达这所有信息的内部表示模型
  • 绘图模块(paint):使用图形库将布局计算后的各个网页的节点绘制成图像结果

渲染整体过程

  • 构建 DOM 树:用 HTML 分析器,解析 HTML 元素,构建一棵 DOM 树;
  • 构建 CSSOM 树:用 CSS 分析器,分析 CSS 文件和元素上的 inline 样式,构建出一棵 CSSOM 树;
  • 若在构建 DOM 树的过程中,当 HTML 解析器遇到一个 script 标记时,即遇到了 JS,将立即阻塞 DOM 树的构建,将控制权移交给 JS 引擎,等到 JS 引擎运行完毕,浏览器才会从中断的地方恢复 DOM 树的构建;
  • 构建 Render 树:将 DOM 树和 CSSOM 树关联起来,构建一棵 Render 树;
  • 确定节点坐标:根据 Render 树结构,为每个 Render 树上的节点计算确定一个在显示屏上出现的精确坐标;
  • 绘制页面:根据 Render 树和节点显示坐标,然后调用每个节点的 paint 方法,将它们绘制出来。

阻塞渲染的分类

  • CSS阻塞渲染
    在构建渲染树时,需要完备的DOM树,CSSOM树,而CSSOM的解析可能会阻塞DOM解析,或者CSSOM树的未完成会阻塞渲染树的构建,这就是CSS阻塞渲染。
  • JS阻塞渲染
    JS 可以查询和修改 DOM 与 CSSOM,所以当 HTML 解析器遇到一个 script 标记时,它会暂停构建 DOM,将控制权移交给 JS 引擎, HTML 解析器会等待 JS 引擎运行完毕,这就是所谓的JS阻塞渲染。
CSS阻塞渲染的情况
阻塞 DOM 解析(CSSOM 树的构建通过阻塞 JS 代码而阻塞 DOM 的解析)

当在 JavaScript 中访问了某个元素的样式,那么这时候就需要 等待这个样式被下载 完成才能继续往下执行,所以在这种情况下(从某种角度看),CSS 也会阻塞 DOM 的解析。

阻塞 DOM 解析(CSSOM 树的构建通过阻塞 JS 代码而阻塞 DOM 的解析)
<body>
    <h1>red1</h1>
    <link rel="stylesheet&
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力不熬夜的小喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值