Google の Page Speed の Apache module 版 mod_pagespeed をインストールして、ちょっとだけ動きを見てみた。
$ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb # sudo dpkg -i mod-pagespeed-beta_current_amd64.deb
config はデフォルトで入るものそのまま。
<IfModule pagespeed_module> SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER ModPagespeed on ModPagespeedUrlPrefix "http://localhost/mod_pagespeed/" ModPagespeedFileCachePath "/var/mod_pagespeed/cache/" ModPagespeedGeneratedFilePrefix "/var/mod_pagespeed/files/" <Location /mod_pagespeed_statistics> Order allow,deny Allow from localhost SetHandler mod_pagespeed_statistics </Location> </IfModule>
こんな HTML (ちょっと古めかしい) を /mod_pagespeed 以下に配置して GET すると……
<link rel="stylesheet" href="./css/global.css" type="text/css"> <link rel="stylesheet" href="./css/toppage.css" type="text/css"> <script language="javascript" src="./js/jquery-1.2.6.min.js"></script> <script language="javascript" src="./js/browserCheck.js"></script> <script language="javascript" src="./js/flashCheck.js"></script> <script language="javascript" src="./js/imageButtonClass.js"></script>
- CSS が連結される
- JavaScript が連結 + minify される
- 一部は HTML 内にインライン展開
<link rel="stylesheet" type="text/css" href="http://localhost/mod_pagespeed/css/cc.d1e8868aa9e24cd3a0b1e662bb9a5180.global,s+toppage,s.css"> <script language="javascript" src="http://localhost/mod_pagespeed/js/jm.c43653aab9297a12091818b0247f65c2.jquery-1,o2,o6,omin,l.js"></script> <script language="javascript">function BrowserChecker(navigatorObj){this.versionStr=navigatorObj.appVersion;this.nameStr=navigatorObj.appName; // 以下略
小さい画像は data URI scheme で展開されたり、
<img id="siteId" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASAAA(略)">
外部の画像は mod_pagespeed 経由に URL が書き換えられて
<img src="http://localhost/mod_pagespeed/img/ce.fbeece41cce99327743774bb37b597f2.banner_s_blog,j.jpg">
もともと付いていなかった Cache-Control ヘッダが付与されたり。
$ lwp-request -m HEAD http://loacalhost/mod_pagespeed/img/ce.fbeece41cce99327743774bb37b597f2.banner_s_blog,j.jpg 200 OK Cache-Control: public, max-age=31536000 Date: Thu, 04 Nov 2010 02:52:09 GMT Server: Apache/2.2.12 (Ubuntu) Vary: Accept-Encoding Content-Length: 9065 Content-Type: image/jpeg Last-Modified: Thu Nov 4 02:50:12 2010 GMT
動的に HTML を書き換えるので気になるパフォーマンスですが、10272 byte の HTML をフィルタ通して、最終的に 17852 byte になって (インライン展開される部分で大きくなる)、
Requests per second: 202.76 [#/sec] (mean)
Apache bench で計測して 200 req/sec ほど。(Athlon64 5400+)
ModPagespeed off だと
Requests per second: 3204.86 [#/sec] (mean)
ぐらいのマシンです。
よほどアクセスが多くないかぎり Web server の CPU は余ってることが多いと思うので、単に組み込むだけでクライアント側の体感速度が上がるならリーズナブルじゃないでしょうか。
mod_proxy と組み合わせる こともできるようですし、フィルタもいろいろある ようで、なかなか興味深いですね。