是js阻止页面渲染或不?

时间:2014-08-10 14:59:56

标签: javascript browser render

我读到了关键渲染路径"和js显示为阻止,但我的经验没什么不同。

关键渲染路径图片 http://i59.tinypic.com/29qnq88.jpg

1,如果我把外部javascript放到头并重新加载页面我会看到空白页,直到脚本加载解析为止等等。 (这正是图片中所示)

2,如果我在body元素的结尾之前放了相同的javascript,我看到渲染的页面和脚本仍在从服务器加载。

为什么不同的是将相同的外部js放在头部和身体中?关键渲染路径是不一样的?

2 个答案:

答案 0 :(得分:4)

<script>块被评估为HTML解析器在文档中遇到它们。当<script>块位于<body>的末尾时,解析器已经构建了大部分DOM,并且可以开始将其呈现给屏幕。 (它可能仍在等待图像或字体,因此布局可能会改变,但它可以开始。)

然而,当<script>位于头部时,浏览器不知道文档正文中有什么内容,因此无法呈现。

我想,了解这一点,要求您至少了解浏览器收到HTML页面内容时发生的事情。页面内容逐个元素地“消化”,这是递归完成的。容器元素的内容从上到下进行处理。

在此过程中,当完全看到<script>标记时(也就是说,浏览器已将HTML内容的一部分从开头<script>消耗到结束</script>),那么在解析过程转移到页面内容的其余部分之前,评估JavaScript代码。 (我在这里忽略了<script>标签上的新的可选“async”属性。)

答案 1 :(得分:0)

由于javascript可以改变DOM和CSSOM,它会阻止任何CRP阶段并阻塞,...除非是异步!