Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要通过Javascript创建脚本标记,而不是使用延迟或异步脚本标记属性?_Javascript_Html_Asynchronous_Disqus_Livefyre - Fatal编程技术网

为什么要通过Javascript创建脚本标记,而不是使用延迟或异步脚本标记属性?

为什么要通过Javascript创建脚本标记,而不是使用延迟或异步脚本标记属性?,javascript,html,asynchronous,disqus,livefyre,Javascript,Html,Asynchronous,Disqus,Livefyre,一些Web应用程序(我想到的是discus和LiveFyre)通过Javascript创建标记,并通过Javascript指定异步加载新脚本。为什么他们要通过Javascript创建标签?而不是简单地做: <script src="..." async> 甚至更简单,只有一行: <script src="http://the_disqus_shortname.disqus.com/embed.js" async> ? (注:我在下面添加了一个答案。请也添加其他答案

一些Web应用程序(我想到的是discus和LiveFyre)通过Javascript创建
标记,并通过Javascript指定异步加载新脚本。为什么他们要通过Javascript创建标签?而不是简单地做:

<script src="..." async>
甚至更简单,只有一行:

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

?


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

我能想到一个不确定的原因(第一)和两个可能的原因(第二和第三):

[编辑]但原因2和3没有实际意义-尽管我的原因2和3:

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

[/Editi]

  • (可能不理解
    async
    属性的旧浏览器完全忽略了整个
    标记,而不是只忽略
    async
    并同步加载脚本?)

  • 也许Discus希望能够动态生成嵌入的脚本,或者根据网站设置重定向到不同的脚本(尽管似乎Discus当前总是重定向到相同的
    embed.js
    script)。无需用户重新配置其DISKS代码

  • 使用重定向允许disks告诉浏览器缓存重定向到的脚本很长一段时间,但同时可以快速重定向到另一个脚本。每次从浏览器缓存下载/获取时,将以1个重定向为代价。这里有人建议:

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

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

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

    不过我不确定

    嗨,谢谢你的回答!我得到的印象是您在回答另一个问题,即“为什么他们将
    放在
    中而不是
    ?-或者您是在暗示使用
    标记或执行:
    …document.createElement('script');…s.src=…;
    之间在性能方面存在一些差异?”?
    <script src="http://the_disqus_shortname.disqus.com/embed.js" async>
    
        ...
        <script>var disqus_shortname = ...</script>
        <script src="//shortname.disqus.com/embed.js" async>
    </body>