Apacheサーバーでホストされているicons.pngという名前のPNGファイルがあります。基本的に、このファイルは他の小さな画像要素 ( CSS スプライト) の組み合わせです。このファイルは、ページが初めて読み込まれるときに、通常の200 OK応答で読み込まれます。
ページが読み込まれた後。カスタムツールチップがトリガーされるリンクがいくつかあります。このツールチップには、icons.pngファイルの画像の一部が、いくつかの HTML 要素の背景画像として表示されます。
たとえば、HTML コードは次のようになります。
jQuery(".profile").tipTip({delay: 200, defaultPosition: "top", content: "<a href='#' style='width: 32px; height: 32px; display: block;
背景: url(images/icons.png) no-repeat -200px -64px'></a>"});
[ icons.pngが参照されているHTML ファイルの他の場所がいくつかあります]
リンクにカーソルを合わせるたびに、ツールチップが表示されますが、同時にブラウザーは、 icons.pngファイルの HTTP 要求をサーバーに送信しています。そして、サーバーからの応答コードは304 Not Modifiedとして来ています。
ファイルのコンテンツはフェッチされていませんが、ヘッダーを送信するオーバーヘッド (約 166 バイト) が毎回存在するため、1.5 秒の遅延が発生しています(私は非常に遅い接続を使用しています)。この 1.5 秒間、ツールチップ要素には背景画像がなく、突然画像がどこからともなく表示されます。
ここにいくつかのスクリーンショットがあります
- Chrome ネットワーク パネル:
- Firebug ネットパネル:
- HTTP ヘッダー:
私が知る限り、リソースがフェッチされると、ブラウザはそれをキャッシュに保持し、サーバーに複数回リクエストするのではなく、必要に応じてそこからフェッチする必要があります。
サーバーがコンテンツとともに「 Expires」または「Cache-Control 」ヘッダーを送信していないことがわかりました。これが Chrome のこのような例外的な動作の背後にある理由であるかどうかはわかりません。どんな提案でも大歓迎です。
PS: アプリケーションはHerokuの共有ホスティング環境でホストされています。Ubuntu 12.04 x86_64 で Firefox 15.0 と Chrome バージョン 21.0.1180.89 を使用しています。