为什么像 Facebook、Disqus、Google、Twitter 这样的服务告诉我们

Why services like Facebook, Disqus, Google, Twitter tell us that

为什么 Facebook Like Button、Disqus 评论等服务告诉我们将此代码添加到我们的文档中

<div id="fb-root"></div>
<script>(function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return;
      js = d.createElement(s); js.id = id;
      js.src = "//connect.facebook.net/it_IT/sdk.js#xfbml=1&version=v2.5";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

不是简单地添加这段代码是一回事吗?

<div id="fb-root"></div>
<script id="facebook-jssdk"src="//connect.facebook.net/it_IT/sdk.js#xfbml=1&version=v2.5"></script>
<script>(function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0]; //line 1
      if (d.getElementById(id)) return;//line 2
      js = d.createElement(s); js.id = id;//line 3
      js.src = "//connect.facebook.net/it_IT/sdk.js#xfbml=1&version=v2.5"; //line 4
      fjs.parentNode.insertBefore(js, fjs);//line 5
    }(document, 'script', 'facebook-jssdk'));
</script>

只需观察第 1 行和第 5 行 - 它只是试图确保

1) facebook 的脚本应该是页面中的第一个脚本。

2) facebook 的脚本是延迟加载的。也就是说,document.ready() 事件不会等待此脚本加载。

当浏览器找到 <script src="..."> 标签时,它会阻止页面的进一步呈现,直到 javascript 已加载(或加载失败)。显然,这不是您想要的网站,因为外部 javascripts.

而卡住

Facebook 为您提供了一个代码,可以异步加载 javascript,而不会干扰您的页面加载。 从 HTML5 开始,您还具有脚本标记的 "async" 属性,该属性可为您提供类似的行为。 <script src="..." async></script>

您可以在本文中找到有关 javascript 加载的更多信息:http://www.html5rocks.com/en/tutorials/speed/script-loading/