Safariのアプリケーションキャッシュを試す
iPhone/iPod touchのSafariは、HTML5準拠のアプリケーションキャッシュ機能を実装している。
これはクラインアント側でキャッシュするファイルを制御できるもので、これを利用すると、オフライン状態でwebアプリを動作させることが可能になる。
- HTML5仕様
http://www.whatwg.org/specs/web-apps/current-work/#appcache
アプリケーションキャッシュを制御するには、キャッシュマニフェストファイルというものをサーバ側に設置する。これにはクライアント側にキャッシュさせたいURIを記述したもので、具体的には以下のようになる。
CACHE MANIFEST #comment index.html code.js img/icon.png
この例では、index.html,code.js,img/icon.pngの3つのファイルをキャッシュするという指示になる。
これをファイルとして、たとえばcache.manifestという名前でサーバに置く。このファイルは適切なmime-typeで出力される必要があるので、apacheなら.htaccessに
AddType text/cache-manifest .manifest
のように書いておく。
htmlファイル側には、ヘッダ部分に次のように記述する
<html manifest="cache.manifest">
これで、このhtmlが読み込まれたときにマニフェストが参照され、クライアント側でキャッシュされるようになる。
一度キャッシュされると、オンラインでもオフラインでもキャッシュが利用され、サーバ側のファイルは参照されなくなる。
サーバ側のファイルを更新したときは、そのままではキャッシュされたままになってしまうので、クライアント側にキャッシュを破棄して再読み込みさせなければならない。
そのためには、マニフェストファイルを更新すればよい。ファイルが1文字でも違っていればいいようなので、コメント部分にバージョン情報を記述しておくなどすればよい。
iPhone/iPod touch のSafariで試してみたところ、ちゃんと動作しているようだ。ただ、いろいろテストしている過程で、キャッシュされたページを開いたところでブラウザが落ちるようになってしまったりといったこともあるので、注意しつつ試してみる必要がある。