【发布时间】:2011-10-13 06:49:50
【问题描述】:
为了避免javascript阻塞网页渲染,我们不能把所有要加载/执行的JS文件/代码都放在关闭</body>标签之前吗?
所有的 JS 文件和代码只有在所有页面被渲染后才会被下载和执行,所以需要像这篇文章中关于 non blocking techniques to load JS files 的技巧那样的技巧。他基本上建议使用如下代码:
document.getElementsByTagName("head")[0].appendChild(script);
为了在让网页被渲染的同时延迟脚本加载,从而导致网页的渲染速度很快。
但是如果不使用这种类型的非阻塞技术(或其他类似的技术),我们不是通过简单地放置我们所有的 JS 文件(待加载/执行)在关闭</body>标签之前?
我更惊讶,因为作者(在同一篇文章中)建议将他的代码放在结束 </body> 标记之前(参见文章的“脚本放置”部分),所以他基本上是在加载脚本无论如何,在结束 </body> 标记之前。那他的代码有什么用呢?
我很困惑,感谢任何帮助,谢谢!
更新
仅供参考,Google Analytics 正在使用类似的非阻塞技术来加载其跟踪代码:
<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>
【问题讨论】:
标签: javascript nonblocking deferred-loading