HTML5のapplication cacheがつかえない件

ちょっと思い違いをしていたのでメモっておきます。


HTML5にはオフラインでも参照できるapplication cacheという機構があります。

「ローカルキャッシュなんで速いし!サーバーの負荷も減るし!!」と思ってちょっと試してみたんですが、これ、動的なページが基本のWebサービスには役に立ちません。


application cacheは、HTMLに

<!DOCTYPE html>
<html manifest="/cache.manifest">
<head>
...

という風にキャッシュの指示ファイル cache.manifest を指定して、そこでキャッシュするとかしないとかを記述するのですが、大きな注意点がひとつあって、「を記述してあるURLのリソースそのものもキャッシュされ、かつ、cache.manifestのNETWORKセクションに明にキャッシュしないように指示したとしても必ずキャッシュされることが仕様で定められている」という点です。

これは 6.6.3.3 Parsing cache manifests の末尾に書かれています。

The resource that declares the manifest (with the manifest attribute) will always get taken from the cache, whether it is listed in the cache or not, even if it is listed in an online whitelist namespace.

HTML Standard

つまり、ユーザーのトップページとか動的なページにおいて、アイコンやCSS等をキャッシュしようとapplication cacheを使うと、その動的なページ自身がキャッシュされてしまい(しかも回避できない)、「動的に情報を表示する」という当該ページの最大の要件が達せられない、ということになります。

なのでapplication cacheは「共通画像とかをろ〜かるきゃっしゅしちゃえ★」的なカジュアルな用途のものではない、ということになります。

とはいえ、

  • URL(ページ)は遷移せずコンテナに徹し、jsでぐりぐりに中身を書き換えて内容を変化させる

という用途には有益と思いますので、みなさんはぼくみたいに用途を間違えてムキーとなったりしないでくださいネというお話でした。