文件加载与渲染问题

script和link标签对DOM解析和渲染的影响

Script标签
1、script标签会阻塞DOM解析和渲染

script标签引入文件时加载、解析和执行都会阻塞DOM的解析和渲染,即解析器在遇到<script> 标记时会立即解析并执行(或请求)脚本。文档的解析将停止,直到脚本执行完毕后才会继续。

2、script标签会触发页面paint

阻塞渲染并不是页面不渲染,如果页面非要等到js加载执行完毕之后再渲染,那用户等待时间也太长了。浏览器的设计肯定会尽早让用户看到页面,因此遇到<script>标签时,会触发一次Paint,浏览器会将<script>标签之前的元素渲染出来。

但也并不是所有的<script>标签都会触发Paint。

  • <head>中的<script>标签是不会触发的,毕竟此时<body>还没有解析,触发Paint也看不到任何内容。
  • inline 的 <script>也不会触发Paint。

因此,建议<script>标签放在</body>结束标签之前,这样不会不会阻塞页面整体内容的DOM解析和渲染。但如果页面中只有inline的<script>标签,那么放在任何位置对页面的渲染影响都是一样的。

link标签
1、link标签不会阻塞DOM解析但是会阻塞DOM渲染

DOM的解析和CSSOM的解析是一个并行的过程。两者互不影响。两者解析完成之后,会合并生成render tree,之后就是layout和paint阶段,渲染到页面中。

<link>标签并不会像带scr属性的<script>标签一样会触发页面paint。浏览器并行解析生成DOM Tree 和 CSSOM Tree,当两者都解析完毕,才会生成render tree,页面才会渲染。所以应尽量减小引入样式文件的大小,提高首屏展示速度。

2、link标签会阻塞JS执行

js运行时,有可能会请求样式信息,如果此时还没有加载和解析样式,js就有可能会得到错误的回复,产生很多问题。因此浏览器在<link>标签的加载和解析过程中,会禁止脚本运行。

结论
  • <script>标签会阻塞DOM的解析和渲染;
  • 带src属性的<script>标签会触发页面paint,渲染此<script>标签之前的元素,但也有一定的条件:
    • <script>标签是在<body>中的,<head>中的不会触发paint;
    • <script>标签之前的<link>标签需加载完毕。
  • inline的<script>标签不会触发页面paint,页面必须等到脚本执行完毕,且DOM Tree和CSSOM Tree解析完毕后才会渲染;
  • <link>标签不会阻塞DOM的解析;
  • <link>标签会阻塞DOM的渲染;
  • <link>标签同时还会阻塞其之后的<script>标签的执行。

script和link标签对DOM解析和渲染的影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值