CSS
JavaScript
CakePHP

【CakePHP】リリースタイミングでのブラウザキャッシュの回避方法

More than 3 years have passed since last update.

リリース時に、jsやcssがブラウザキャッシュに残り、変更が反映されない問題の対応方法。


実現方法

jsやcssは?以降に書いたクエリストリングも含めて認識している。

そのため、リリースごとにクエリストリングを変更すれば、リリース直後にjsやcssを再読み込みして、その後はキャッシュされる。

ちなみに、クエリストリングは、?XXX=YYYの形であれば何でも良い。


js

<script type="text/javascript" src="hoge.js?ver=852"></script>



css

<link rel=stylesheet type="text/css" href="hoge.css?ver=852"/>



CakePHPでの例

core.phpで設定できるAsset.timestampを有効にすることにより、ヘルパーで作成したjsやcssの読み込みに、最終更新日をクエリストリングとして付与してくれる。

Configure::write('Asset.timestamp', 'force');

コメントアウト前のデフォルトでは、第二引数がtrueになっている。trueの場合はdebugレベルが0より大きい場合(つまりDevelopment Modeの場合)のみ有効になるが、forceを設定すると常に有効になります。

参考:CakePHP2のcore.phpでAsset.timestampの設定を変更するとブラウザキャッシュを無効化することができる