画像掲示板の泉はSQL化やPHP出力化を未だやってはいないので、昔ながらのdatログ+html書き出し方式で運営してしまっておりましたが、html書き出し型で問題となるのがブラウザのキャッシュコントロールです。

掲示板のとあるスレッドで書き込みがあった場合には、その書き込みが一番目立つよう、書き込みされたスレッドがスレッド一覧の最上位に移動するようPHPでプログラムしてありました。ログデータ読み込んでスレ毎に配列データにして、書き込みされたスレッドデータをarray_unshift()で先頭に置いたりといったことをやって実現しています。

この配列操作は全く問題なくできているのですが、最終的にこれをhtmlファイルに上書きして保存したとしても、ブラウザ側でキャッシュを吐きだされてしまうと、せっかくのスレッド並び替え機能も意味がなくなってしまい、この解決方法を考えてみた話となります。

特に、掲示板のデザインをギャラリー風のタイル並びのようなデザインにしていたので、書き込みしたスレッドがすぐに最上位に上がってくれていないと、書き込みした感が全くでないので非常に残念な感じになってしまいます。

書き込みしたら先頭にスレを持ってくるようにしていますが、
キャッシュを読まれると当然移動前のhtmlのままになります

<head>内の<meta>タグにお決まりの下記設定はいれていますが、Chromeでうまく動くときもあればSafariではNGだったり、その逆だったりとやはりブラウザやアプリ任せのキャッシュコントロールは非常に弱い感じです。

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">

他にも、<meta http-equiv=”Expires”>でキャッシュ有効期限を入れてみたりはしてみたものの、状況は全く変わらずでした。

これは無理っぽいかと思った時、それならJavaScriptで強引にブラウザをリロードさせてしまえばいいんじゃない!?とつい思いついてしまい、実装させるところまでやってしまいました。

最初にやった方法が、とりあえずsetTimeout()でリロードをばんばん走らせてしまえばいいのでは!?というかなり強引な方法です。

特に何も考えずにDOM読み込み後の雑多な処理の一つにsetTimeoutのタイマーでリロード処理を放り込んでみました。

$(function() {
 setTimeout(function() {
  location.reload();
 },30000);
});

setTimeout()メソッドで指定する数値はミリ秒 (1/1000 秒) 単位となるので、とりあえず30,000ミリ秒(30秒)で設定をいれ、試しに掲示板スレに書き込みをしてみました。

書き込み後にジャンルトップページに戻ってみたものの、やはり相変わらず最上位には書き込みしていないスレが上がったままの、キャッシュhtmlが表示されておりましたが、しばらくすると、タイマーでブラウザがリロード!見事書き込みスレッドが最上位に表示された最新ファイルを読み込ませることができました。safariでやってもいい感じです。

とりあえずこれでOKということで、全ジャンルの掲示板プログラムやテンプレートの更新をかけて無事作業終了となった時、ふと・・・・肝心なことに気が付いてしまいました。

勘が良いというか、普通の人なら見た瞬間に気付くと思いますが、30秒毎にリロードされたら書き込みなんてできるわけないじゃんということです。

はいその通りでした。

新規投稿をしようと書き込みをしていたら、30秒でリロードが走って書き込み中のコメントが真っ白に。。。当たり前ですね。

キャッシュコントロールのことばかり考え、そもそも掲示板で書き込みをするってことをすっかり忘れてしまっておりました。

ということで、また1からやり直しです。

要は、1回だけリロードさせればいいということなので、調べてみたら似たようなことを質問している方がいらっしゃいました。「とあるページにアクセスした際、JavaScript(jQuery)を使って一度だけページをリロードしたいと思っております。」とのことで、まさに同じ悩みをお持ちだったようです。

ベストアンサーによりますと、 window.nameプロパティに名前を適当に付けてあげて、この指定した名前がなければリロードを走らせようというシンプルな方法でした。

if(window.name != "reloaded") {
 location.reload();
 window.name = "reloaded"; //適当な名前
}else{
 window.name = "";
}

やってみたところ、1回だけリロードを走らせることができるようになりましたので、掲示板のスレッドも思った感じで並び変わってくれました。

不思議な処理が一本走った感があって気持ち悪い方もいるかもしれませんが、こんな事情があってやっているだけですので気にしないでください。

肝心のアクセス数や投稿数があんまりない掲示板ですが、画像アップローダー代わりにでもご利用下さい。

画像掲示板の泉はこちら