关于css和js加载时阻塞页面呈现的问题

发布于 2022-09-04 22:28:38 字数 1742 浏览 20 评论 0

为了进行测试,我特意将big.css(3.8MB)和big.js(8.1MB)文件变大.控制台网络选择了Regular 4G,开启了Disable cache,并且js文件和css文件都在body标签之后引入。

第一种情况:页面中不引入big.js,只引入big.css:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    
</head>
<body>
      <div>我是呈现出来的文字</div>
</body>
<link rel="stylesheet" href="css/big.css">
</html>

结果:此时页面从一片空白到呈现出页面中的文字总共耗时7.62s
截图:图片描述图片描述图片描述

第二种情况:页面同时引入big.css和big.js,并且将big.css放在big.js之后:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    
</head>
<body>
      <div>我是呈现出来的文字</div>
</body>
<script src="js/big.js"></script>
<link rel="stylesheet" href="css/big.css">
</html>

结果:页面从一片空白到呈现出页面中的文字几乎没有耗时,也就是说立即就呈现出了文字,即使此时css和js仍然在加载中。
截图:图片描述图片描述图片描述

问题:为什么第一种情况css的加载会阻塞页面渲染那么久,而第二种情况几乎没有阻塞?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑叹一世浮沉 2022-09-11 22:28:38

因为单线程,以及html是按顺序解析的
第一种因为你的css在前,所以要先下载,解析
第二种因为在后面,所以先看到了文字,才去下载解析js和css
这也是为什么大家说要把css放在head中,js放在底部,我们希望用户看到界面的时候是有样式的,同时也不希望js的下载和执行阻塞用户看到页面的时间

很快妥协 2022-09-11 22:28:38

css加载不会阻塞DOM树解析,但是会阻塞DOM树渲染,css加载会阻塞后面js语句的执行。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文