3

自分のサイトにこのスクリプト タグがあるとします (SO から借用)。

<script type="text/javascript" async="" 
      src="http://edge.quantserve.com/quant.js"></script>

ダウンしたり、404 を返さずに応答を停止した場合edge.quantserve.com、残りのページが読み込まれる前にタイムアウトを待つ必要はありませんか? Chaos Monkey が現れて、私のサイトが依存しているサーバー、つまり CDN の一部ではなく、フェイルオーバーが不十分なサーバーを攻撃していると思います。

この問題を処理する業界標準の方法は何ですか? SOでだまされた人が見つかりませんでした。間違った用語を探しているのかもしれません。

更新: SO コードをもう少し詳しく調べる必要がありました。一番下に次のようなものがあります。

<script type="text/javascript">var _gaq=_gaq||[];_gaq.push(['_setAccount','UA-5620270-1']);
        _gaq.push(['_setCustomVar', 2, 'accountid', '14882',2]); 
_gaq.push(['_trackPageview']);
    var _qevents = _qevents || [];
    (function(){
        var s=document.getElementsByTagName('script')[0];
        var ga=document.createElement('script');
        ga.type='text/javascript';
        ga.async=true;
        ga.src='http://www.google-analytics.com/ga.js';
        s.parentNode.insertBefore(ga,s);
        var sc=document.createElement('script');
        sc.type='text/javascript';
        sc.async=true;
        sc.src='http://edge.quantserve.com/quant.js'; 
        s.parentNode.insertBefore(sc,s);
    })();
    </script>

OK、quant.jsファイルの読み込みに失敗した場合は、 ga.async=true;. 多分それがトリックです。

考えられる答え: https://stackoverflow.com/a/1834129/30946

4

3 に答える 3

1

一般的に、それを上手くクロスブラウザで行うのは難しいです。

いくつかの提案:

  1. スクリプトをHTMLページの一番下に移動します(スクリプトを要求する前にほとんどすべてが表示されるようにします)
  2. <script>document.write("<scr"+"ipt src='http://example.org/script.js'></scr"+"ipt>")</script>一番下に移動して、更新後に追加した方法でラップします( document.createElement('script')
  3. 最後のオプションは、XHRを介してロードすることです(ただし、これは同じドメインでのみ機能するか、サードパーティサーバーでCORSが有効になっている場合にのみクロスドメインで機能します)。次にtimeout、XHRのプロパティ(IEおよびFx12 +の場合)を使用できます。他のブラウザーではsetTimeout、XHRを使用して確認しreadyStateます。今のところ、これは一種の複雑でクロスブラウザではないため、オプション2が最適です。
于 2012-07-31T21:56:12.340 に答える
1

サーバー上のファイルのコピーを作成し、これを使用します。サーバーからのコピーがロードに失敗した場合にのみ、コピーをロードします

<script src="http://edge.quantserve.com/quant.js"></script>
    <script>window.quant || document.write('<script src="js/quant.js"><\/script>')</script>
于 2012-07-31T21:28:36.507 に答える
0

ページの残りの部分が読み込まれる前にスクリプトが読み込まれるまでブラウザが待機する必要があるという質問に答えるには、通常、答えはノーです。一般的なブラウザーには、ページとリンクされたコンテンツ (CSS、画像、js) のダウンロードを処理する複数のスレッドがあります。そのため、ページの残りの部分をロードする必要がありますが、ユーザーのブラウザー インジケーターには、最終的な要求が満たされるかタイムアウトになるまでページがロードを試みていることが示されます。

ロードしようとしているリソースの性質に応じて、ページへの影響は明らかに異なります。通常、これが心配な場合は、すべてのファイルを共通の CDN (トラフィックがそれほど多くない場合は Web サイト) でホストすることができます。取り組むべきより大きな問題:)

于 2012-07-31T21:32:22.790 に答える