【发布时间】:2015-08-19 14:38:41
【问题描述】:
我知道这个问题被问了很多次,但我没有找到答案。那么为什么建议在正文标签的末尾包含脚本以获得更好的渲染效果呢?
来自 Udacity 课程 https://www.udacity.com/course/ud884 - 在 DOM 和 CSSOM 准备好后开始渲染。 JS 是 HTML 解析阻塞,任何脚本都在 CSSOM 准备好后启动。
如果我们得到:
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>CRP</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<!-- content -->
<script src="script.js"></script>
</body>
</html>
CRP 将是:
CSSOM ready > JS execute > DOM ready > Rendering
如果脚本在前面:
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>CRP</title>
<link rel="stylesheet" href="styles.css">
<script src="script.js"></script>
</head>
<body>
<!-- content -->
</body>
</html>
CRP 是一样的:
CSSOM ready > JS execute > DOM ready > Rendering
这个问题只是关于“同步”脚本(没有 async/defer 属性)。
【问题讨论】:
-
渲染不是一次完成的,而是逐步完成的。如果 JS 在正文末尾阻塞,则将呈现该点之前的页面(如果 CSSOM 已准备好)。
标签: javascript html css web pageload