为了避免javascript阻塞网页渲染,我们不能把所有要加载/执行的JS文件/代码都放在结束</body>
标记之前吗?
所有的 JS 文件和代码只有在所有页面都被渲染后才会被下载和执行,所以需要像这篇文章中建议的关于非阻塞技术来加载 JS 文件的技巧。他基本上建议使用如下代码:
document.getElementsByTagName("head")[0].appendChild(script);
为了在让网页被渲染的同时延迟脚本加载,从而导致网页的渲染速度快。
但是如果不使用这种类型的非阻塞技术(或其他类似的技术)</body>
,我们不是通过简单地将我们所有的 JS 文件(要加载/执行)放在结束标记之前来实现相同的非阻塞结果吗?
我更加惊讶,因为作者(在同一篇文章中)建议将他的代码放在结束</body>
标记之前(参见文章的“脚本放置”部分),所以他基本上是在结束</body>
标记之前加载脚本。那么,他的代码需要什么?
我很困惑,任何帮助表示赞赏,谢谢!
更新
仅供参考,谷歌分析正在使用类似的非阻塞技术来加载他们的跟踪代码:
<script type="text/javascript">
...
(function()
{
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = 'your-script-name-here.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s); //why do they insert it before the 1st script instead of appending to body/head could be the hint for another question.
})();
</script>
</head>