请参阅:https://developers.google.com/speed/docs/insights/BlockingJS
他们说:
外部阻止脚本强制浏览器等待获取JavaScript,这可能会在呈现页面之前添加一个或多个网络往返。
为什么Google会这样说?这让人很困惑。实际上他们说:
外部阻止脚本强制浏览器在呈现页面之前等待。
他们不是说:
外部阻止脚本强制浏览器在呈现页面的A(特定)部分之前等待。
我们来看这个例子:
INDEX.HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
Line 1<br />
<script>
alert('I could also put here for example some more html.');
</script>
Line 2<br />
<script src="script.js"></script>
Now the HTML parser is almost done!<br />
</body>
</html>
的script.js
// Synchronous delay of 30 seconds
var timeWhile = new Date().getTime();
while( new Date().getTime() - timeWhile < 30000 );
这是测试:https://external-blocking-scripts-2.glitch.me/
结果是,在获取“外部阻止脚本”之前,浏览器正在显示(呈现)内容。
那么为什么谷歌这样说呢?在我看来,“页面”与“页面的一部分”完全不同。如果他们看到这样的话,人们会在“页面速度”方面做出错误的决定。我发布这个,因为在过去我也是其中之一。我仍然看到周围的混乱。