Safariのアプリケーションキャッシュを試す

iPhone/iPod touchSafariは、HTML5準拠のアプリケーションキャッシュ機能を実装している。
これはクラインアント側でキャッシュするファイルを制御できるもので、これを利用すると、オフライン状態でwebアプリを動作させることが可能になる。

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 touchSafariで試してみたところ、ちゃんと動作しているようだ。ただ、いろいろテストしている過程で、キャッシュされたページを開いたところでブラウザが落ちるようになってしまったりといったこともあるので、注意しつつ試してみる必要がある。