浏览器渲染HTML

渲染引擎首先通过网络获得所请求文档的内容,通常以8K分块的方式完成。
下面是渲染引擎在取得内容之后的基本流程:
  1.解析html为dom树,解析css为cssom。渲染引擎开始解析html,并将标签转化为内容树中的dom节点。
  2. 把dom和cssom结合起来生成渲染树(render)。接着,它解析外部CSS文件及style标签中的样式信息。这些样式信息以及html中的可见性指令将被用来构建另一棵树——render树。Render树由一些包含有颜色和大小等属性的矩形组成,它们将被按照正确的顺序显示到屏幕上。
  3. 布局渲染树,计算几何形状。Render树构建好了之后,将会执行布局过程,它将确定每个节点在屏幕上的确切坐标。
  4. 把渲染树展示到屏幕上。再下一步就是绘制,即遍历render树,并使用UI后端层绘制每个节点。
image
首先浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎。渲染引擎在不同的浏览器中也不是都相同的。比如在 Firefox 中叫做 Gecko,在 Chrome 和 Safari 中都是基于 WebKit 开发的。

渲染过程中遇到JS文件怎么处理?

JavaScript的加载、解析与执行会阻塞DOM的构建,也就是说,在构建DOM时,HTML解析器若遇到了JavaScript,那么它会暂停构建DOM,将控制权移交给JavaScript引擎,等JavaScript引擎运行完毕,浏览器再从中断的地方恢复DOM构建。

也就是说,如果你想首屏渲染的越快,就越不应该在首屏就加载 JS 文件,这也是都建议将 script 标签放在 body 标签底部的原因。当然在当下,并不是说 script 标签必须放在底部,因为你可以给 script 标签添加 defer 或者 async 属性(下文会介绍这两者的区别)。

JS文件不只是阻塞DOM的构建,它会导致CSSOM也阻塞DOM的构建。

原本DOM和CSSOM的构建是互不影响,井水不犯河水,但是一旦引入了JavaScript,CSSOM也开始阻塞DOM的构建,只有CSSOM构建完毕后,DOM再恢复DOM构建。
script标签用于加载脚本与执行脚本,是前端开发中非常重要的标签
直接使用script脚本的话,html会按照顺序来加载并执行脚本,在脚本加载及执行分过程中,会阻塞后续的DOM渲染。
现在script提供了async和defer两个属性来解决DOM渲染阻塞的问题
1 有 async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)。
异步脚本不能保证按照它们在页面中出现的次序执行。
2 有 defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。
推迟的脚本原则上按照它们被列出的次序执行。

posted @ 2023-09-05 21:31  jialiangzai  阅读(91)  评论(0)    收藏  举报