4

Chrome (Linux と Windows)、Firefox、Opera をテストしました。

pushState を実行するたびに、Chrome はサーバーにアクセスします。リクエストをまったく使用していないようです。ログファイルを見ていたので気づいただけです。

リクエストは次のとおりです。

16 Mar 2013 01:00 PM ip=127.0.0.1 agent=Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22 uri=/ T1=0ms T2=0ms T3=0ms 

コード行は次のとおりです。

history.pushState({}, 'my_app', URL);

URI に「/」が含まれていることは知っていますが、それはプッシュされている URL でさえありません。

Firefox と Opera はこれを行わず、私には正しくない動作のように思えます。バグですか?

私が心配する理由は、スケーリングのためです。ユーザーが自分のアプリをブラウジングしているときにダミーのリクエストをしてほしくありません。

4

1 に答える 1

7

@JavascriptNewbie - あなたは一人ではありません:D

地球上 (または少なくともインターネット上) で唯一の血色の悪い人であることにおめでとうと言いたいです。

良い点: Chrome と Firefox は、必要に応じてプリフェッチを実行できます。あなたの場合、少なくともページ内の何かが原因で「プリレンダー」を中止しているように見えますが、リンクされたスクリプトまたはスタイルをプリフェッチして実行しているかどうかを確認することをお勧めします。

短い: Chrome と FireFox は、バックフォワード キャッシングを最適化できるようにするため、およびユーザーがナビゲーション バーから URL をコピー アンド ペーストした場合に備えて、サーバーから pushState/replaceState URL を取得することを決定する場合があります。これは非決定論的であり、常に発生するとは限りません。

ロング: ここに記載されている制約のいずれかに該当しない限り、さらに悪化します: https://developers.google.com/chrome/whitepapers/prerender Chrome は実際に JavaScript を解釈して実行します...これにより、AJAX などのトリガーが発生する可能性があります。さらには Websocket まで。

より長い: 私はここでテスト スイートと記事を作成しました: https://github.com/nickhsharp/prefetchNightmareは、最終的にブログ投稿になる可能性があります。

于 2013-09-19T17:55:26.557 に答える