ActionCacheについてきっちり理解する

FragmentCache等に比べ、活用されることの少ないActionCacheですが、正直よく理解してないという方も多いのではないだろうか。

Rails 2.1のActionCacheのコードをざっと眺めて、簡単に特徴をまとめたいと思う。

「ActionCacheはフィルタ」

ActionCacheは、「キャッシュが存在すれば、キャッシュの内容を表示してfalseを返す(処理を止める)」というフィルタとして実装されている。
具体的には、caches_actionを呼び出すと、around_filterでActionCacheFilterのインスタンスが設定される。
これがどういうことかというと、

  • キャッシュが存在すれば、アクションは実行されない。つまり、アクション内にボトルネックとなる処理がある場合、有効なキャッシュ手段となる。
  • フィルタは実行されるので、「ログイン済みのユーザのアクセスのみページ(キャッシュ)を表示」といった、フィルタを活用する処理は可能
  • ただし、caches_actionよりも前にbefore_filter等を呼び出すか、prepend_before_filterを使用することが必要。(キャッシュが見つかった時点で処理を中断してしまうので、その後に実行されるべきフィルタは実行されない)