0

这两种异步 js 加载方法有区别吗?

<div class="g-plusone"></div>
<script type="text/javascript">
(function(d, t) {
var g = d.createElement(t),
s = d.getElementsByTagName(t)[0];
g.async = true;
g.src = 'https://apis.google.com/js/plusone.js';
s.parentNode.insertBefore(g, s);
})(document, 'script');
</script>

<script type="text/javascript">
//<![CDATA[
(function() {
  document.write('<fb:like href="http://www.sandrophoto.com/' + location.pathname + '" send="true" width="360" show_faces="false" font=""></fb:like>');
  var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];
  s.type = 'text/javascript';
  s.async = true;
  s.src = 'http://connect.facebook.net/en_US/all.js#xfbml=1';
  s1.parentNode.insertBefore(s, s1);
})();
//]]>
</script>
4

2 回答 2

0

最明显的区别是 document.write 方法将代码写入文档的确切位置,其中另一种方法将内容放入指定的容器 div 中。

还有一些其他差异,以及异步加载脚本的其他一些方式。

Steve Souders 写了一篇关于这个主题的优秀文章,http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/,我推荐阅读。

于 2011-07-12T06:10:34.440 回答
0

这两个在加载时在概念上看起来相似。他们都创建了一个新的脚本标签并将其添加到 DOM 中,这使得两者都可以异步加载,而无需依赖必须按呈现顺序加载的其他脚本标签。这些实现存在细微差别,但从加载的角度来看,它们在概念上看起来是相同的。

FB 代码中的 document.write() 会导致一些其他加载事件的序列化,并且可能会稍微减慢它(取决于具体情况)。

于 2011-07-12T06:16:36.450 回答