codereposに置きました
Template::Plugin::AddTime – TT filter plugin to add file modified time
# 正直あまり自信はないのですが
jsとかcssとか、あまり変化しないのでブラウザにしっかりキャッシュしてほしいけど、
ファイルを更新した時には再読み込みしてほしいって時に、
expiresヘッダをつけないと、ブラウザの実装によってリクエストが来たり来なかったりして
cssを更新したのに読み込まないクライアントは表示が崩れたりします。
なのでexpiresヘッダをつけてしっかりブラウザにキャッシュして欲しいって時に、
ファイルの更新時刻をくっつけたりバージョン番号をくっつけたりすることがあります。
これはファイルの更新時刻をくっつけるためのTT Filterプラグインです。
こんなふうに使います。
# or with a base path<br />
[% USE AddTime('tmpl/static') -%]<br />
[% '/js/prototype\.js' | addtime -%]</p>
<p># adds modified time of tmpl/static/js/prototype\.js<br />
/js/prototype\.js\?1231163490<br />
こうしておいて、lighttpdの設定で
expire.url = (<br />
"/js/" => "access 1 years",<br />
)<br />
とかってすれば
Expires: Fri, 01 Jan 2010 00:42:29 GMT<br />
Cache-Control: max-age=31104000<br />
こんなヘッダがくっついてくる。
svnでソース管理してる時には ~/.subversion/config
にこう書いておくと
### Set use-commit-times to make checkout/update/switch/revert<br />
### put last-committed timestamps on every file touched.<br />
# use-commit-times = yes<br />
use-commit-times = yes<br />
ファイルの更新時刻がコミットの時刻になるので便利だったりする時もあります。
?をつけるとキャッシュが利かない時があるって
キャッシュの上手な使い方
こちらにありましたがちょいちょい見た感じそのケースが見つからなかったので、?使っちゃっています。
? 使わなかったら
prototype_1231163490.js みたいにして prototype.js にlighttpdでrewriteするようにするのがいいのかなぁ