3

一些 Web 应用程序(我正在考虑 Disqus 和 LiveFyre)<script>通过 Javascript 创建标签,并通过 Javascript 指定异步加载新脚本。他们为什么要通过 Javascript 创建标签?而不是简单地做:

<script src="..." async>

一个例子:

这是 Disqus 指示网站所有者加载评论的方式:

<script type="text/javascript">
    var disqus_shortname = ...
    (function() {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = '//' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] ||
           document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>

src = ...disqus.com/embed.js地址只是重定向到另一个 Disqus 服务器上的静态脚本,显然独立于disqus_shortname

为什么不告诉人们使用这段代码:

<script>
    var disqus_shortname = ...
</script>
<script src="http://direct-address-to-the-embed.js-script" async>

或者更简单,只有一行:

<script src="http://the_disqus_shortname.disqus.com/embed.js" async>

?

(PS 我在下面添加了一个答案。请也添加其他答案:-))

4

2 回答 2

0

我可以想到一个不确定(第 1 号)和两个可能的原因(第 2 号和第 3 号):

[编辑]但原因 2 和 3 尚无定论 - 尽管我的原因 2 和 3,Disqus 可以简单地做到这一点:

<script src="http://the_disqus_shortname.disqus.com/embed.js" async>

[/编辑]

  1. (也许不理解该async属性的旧浏览器完全忽略了整个<script ... async>标签?而不是只忽略async并同步加载脚本?)

  2. 也许 Disqus 希望能够动态生成嵌入脚本,或重定向到不同的脚本,具体取决于网站设置(尽管似乎 Disqus 当前总是总是重定向到相同的embed.js脚本)。无需用户重新配置他们的 Disqus 代码。

  3. 使用重定向允许 Disqus 告诉浏览器缓存重定向到的脚本很长一段时间,但同时可以快速重定向到另一个脚本。每次下载/从浏览器缓存获取 1 次重定向为代价。这是在这里建议的:https ://stackoverflow.com/a/10098250/694469

于 2013-12-22T11:33:56.070 回答
0

我的猜测是 Disqus(和其他服务)希望确保他们的脚本不会在您放置他们的脚本时减慢用户站点的加载速度(可能许多 CMS 将脚本放在 head 元素中)。

如果您总是将脚本放在正文元素的末尾,那么编写简短版本可能是最佳选择:

    ...
    <script>var disqus_shortname = ...</script>
    <script src="//shortname.disqus.com/embed.js" async>
</body>

不过我不确定!

于 2013-12-23T10:13:31.663 回答