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>

または、さらに単純に、1 行だけ:

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

?

(PS以下に1つの回答を追加しました。他の回答も追加してください:-))

4

2 に答える 2

0

不確かな理由が 1 つ (No. 1) と、可能性の高い理由が 2 つ (No. 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 は埋め込みスクリプトを動的に生成したり、Web サイトの設定に応じて別のスクリプトにリダイレクトしたりできるようにしたいと考えています (現在、Disqus は常に同じembed.jsスクリプトに常にリダイレクトしているように見えますが)。ユーザーが Disqus コードを再構成する必要はありません。

  3. リダイレクトを使用すると、Disqus はブラウザにリダイレクト先のスクリプトを長時間キャッシュするように指示できますが、同時に別のスクリプトにすばやくリダイレ​​クトすることもできます。ダウンロード/ブラウザーキャッシュからのフェッチごとに 1 つのリダイレクトのコストがかかります。これはここで提案されました: https://stackoverflow.com/a/10098250/694469

于 2013-12-22T11:33:56.070 に答える
0

私の推測では、Disqus (および他のサービス) は、スクリプトを配置するたびに、スクリプトがユーザー サイトの読み込みを遅くしないようにしたいと考えています(おそらく、多くの CMS はスクリプトを head 要素に配置します)。

スクリプトを常に body 要素の最後に配置する場合は、短いバージョンを記述するのが最適な場合があります。

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

よくわからないけど!

于 2013-12-23T10:13:31.663 に答える