ControllerやViewを更新するのと違い、Javascript(CSSもそうだが)はブラウザにキャッシュされている可能性があるので、更新が即時反映されない場合がある。
Javascript更新時にブラウザでキャッシュを削除していたが、Javascript読み込み文にタイムスタンプを付けていれば、更新時にブラウザのキャッシュを気にしなくてよくなるようなので、これを実現してみる。
やり方
Javascript読み込み文 に付加するタイムスタンプはJSファイルのタイムスタンプをとってくる。
タイムスタンプはファイル読み込み時のheader情報から取得できるとのこと。
$headers = get_headers(JSファイルのフルパス, 1 );
$scripttimestamp = date("YmdHis",strtotime($headers['Last-Modified']));
JSファイルを読み込むときに、この「 $scripttimestamp 」を付加する。
echo $this->Html->script(JSファイルのパス .'?v='.$scripttimestamp,array('inline'=>false));
これで、JSファイル更新時にキャッシュクリアをしなくても更新が反映されるようになった。
どうでもいいけど
この手法でCSSかJSか何のファイルか忘れたが、timestampを取得しようとしてできなかったことがあった。
どんなケースだったか忘れたけど、もしまた同じ状況になったときに、その問題もこの記事に書くようにしよう。