先日リリースした某サービスの HTML を見ていたら、外部 js ファイルの読み込みに が十数行ずらずらと並んでいるのを発見。
これ、確か Apache module でまとめて配信してくれるのがあったよなあ……とブクマを掘り起こして、mod_concat を見つけたので試してみた。
ソースコードのコメントに
* The Idea was initially thought of by David Davis in Vox, and reimplemented in perlbal.
とあるように、もともとは Perlbal が持っている機能を Apache module にしたもの。
svn からチェックアウトして apxs でコンパイル & インストール。
$ svn checkout http://modconcat.googlecode.com/svn/trunk/ modconcat-read-only # apxs -i -c modconcat-read-only/mod_concat/mod_concat.c
httpd.conf に設定。
LoadModule concat_module modules/mod_concat.so
これで path/to/??FILE1,FILE2,FILE3 のように呼んでやると、カンマで区切られたファイルがすべて連結されて出力される。"??" が、mod_concat で配信する合図。
実際の効果を Firebug でみるとこんな感じ。
あとは開発用に、Catalyst::Plugin::Static::Simple でこの記法を処理する機能が必要かも。
TT で対処もできるけど。
[% files = ['file1', 'file2', 'file3'] %] [% IF c.config.use_mod_concat %] <script src="[% c.uri_for('static') %]/??[% files.join(',') %]"></script> [% ELSE %] [% FOR f IN files %] <script src="[% c.uri_for('static', f) %]"></script> [% END %] [% END %]