新しいデータが到着したかどうかを確認するためだけに、F5 または Ctrl-R をクリックして頻繁に再読み込みされる Web ページがあります。
このページのすべての画像には永久キャッシュヘッダーがあるため、ブラウザで再読み込みしないでください。
しかし、ユーザーが F5 キーを押すと、ほとんどのブラウザーは、要求と if-modfied-since ヘッダーを含むすべてのキャッシュ エントリをチェックします。いずれにせよ、HTML ページは決してキャッシュされませんが、画像は長期間キャッシュされる必要があり、画像が変更されたかどうかを確認する必要はありません。これは無用な要求であり、削除したいと考えています。
ページに再読み込みアイコンがありますが、ユーザーは引き続きキーボードを使用して再読み込みします (むしろ私もそうします)。
そこで、F5 キーと Ctrl-R キーをトリガーして、次のように手動でリロードを実行しようとしました (ところで、jquery を使用しています)。
<img src="someimg.png" />
<a id="reload" href="mypage.html">Reload</a>
<script type="text/javascript">
function loading() {
window.location.href = $('#reload').attr("href");
return false;
}
function isF5(e) {
return e.which == 116;
}
function isCtrlR(e) {
return e.ctrlKey && e.which == 82;
}
function triggerReloadKeys(e) {
if (isF5(e) || isCtrlR(e)) {
$('#reload').click();
}
}
$(document).bind("keydown", triggerReloadKeys);
$('#reload').click(loading);
someimg.png は、常に永続的なキャッシュ ディレクティブと共に配信されます。
私の最初の答えは、ユーザーのブラウザーを乗っ取らないで、必要に応じて更新できるようにすることです。その通りですが、ピーク時には最大 5000 ページ/秒です。誰もが常にページをリロードしているため、さらに多くの画像が表示されます。リクエストの速度に関係なく、リクエストの量を減らしたいだけです。(そして、メニューバーでブラウザの更新ボタンをトリガーできないことは知っていますが、今は気にしません)。
リロード ボタンや F5 がないだけで、誰もが独自の HTML リロード リンクを使用する必要があるため、アプリのリクエストの量を減らすことにかなり成功しました。
可能なことは、次のように F5 キーをまとめて無効にすることです。
function triggerReloadKeys(e) {
if (isF5(e) || isCtrlR(e)) {
return false;
}
}
キャッシュを使用している間に F5 キーを押してリロードを強制し、ページ上の別のリンクをクリックする動作を模倣することさえ可能かどうかはわかりません。
何か案は?