前のhtmlと現在のhtmlを比較して異なれば再読み込みさせる
通常は**サーバー応答を変化させる「キャッシュ制御(ブラウザキャッシュの制御)」**を使います。
ブラウザはサーバー上のファイルがいつアップデートされたか、再アクセスするまで知ることができないためです。
ETag の例をざっくり書くと、こんな感じです。
- ブラウザからサーバーへの(初回)要求。
- サーバーは、応答ヘッダ
ETag: "token"
を含めて200 OK
を応答。
(ブラウザは応答内容をトークンを含めて覚える:キャッシュする)
3. ブラウザからサーバーへの(2回目以降の)要求するとき、
以前、知った"token"
を 要求ヘッダ If-None-Match: "token"
に含めて要求
(「もし、違っていたら更新情報を応答して!以前のは覚えてる」という意味) 。
4. サーバーは、"token"
から、2回以上アクセスしてきたブラウザだと判断して新旧を比較。
内容が変わってないなら、エラー 304 Not Modified
(覚えているのを使ってね)を応答。
変わっていると、2.と同様に応答ヘッダに ETag: "token2"
(新しいトークン)を含め、更新内容 を200 OK
で応答。(ブラウザは応答内容を新しいトークンを含めて覚えなおす:キャッシュ更新する)
これの繰り返しになります。
ものすごくサーバーに負荷がかかってしまいます
当然です。
示されたコードは、5秒毎に強制的に再リクエストする実装ですから。
閲覧者にとっても、5秒後にスクロールがリセットされてしまうページになっています。
追記)
サーバー側プログラムを弄るときに「キャッシュ制御という方法がある」と覚えておけばいいと思います。
ブラウザ側だけで実装する仕様は無くはないのです(アプリケーションキャッシュ)。
が、仕様もWD(作業草案)のまま放置され、実装されている内容は、キャッシュの削除が厄介で、とても「安全」とは言えない状態です。このため、ブラウザ側だけで安全に更新状態を判断する手段は無いと考えてください。