[TOC]
web.dev
如果下载CSS文件阻塞了,会阻塞DOM树的合成吗?会阻塞页面的显示吗?
<html>
<body>
极客时间
<script>
document.write("--foo")
</script>
</body>
</html>
DOM解析器会先执行 JavaScript脚本,执行完成之后,再继续往下解析。
<html>
<body>
极客时间
<script type="text/javascript" src="foo.js"></script>
</body>
</html>
当解析到javascript的时候,会先暂停DOM解析,并下载foo.js文件,下载完成之后执行该阶段js文件,然后再继续往下解析dom树。这就是js文件为什么阻塞dom渲染。
<html>
<head>
<style type="text/css" src = "theme.css" />
</head>
<body>
<p>极客时间</p>
<script>
let e = document.getElementsByTagName('p')[0]
e.style.color = 'blue'
</script>
</body>
</html>
当我在JavaScript中访问了某个元素的样式,那么这时候就需要等待这个样式被下载完成才能继续往下执行,所以在这种情况下,CSS也会阻塞DOM的解析。
defer
这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在