Railsキャッシュの手法
読み込みがあまりにも遅いページがあったので、初めてキャッシュを導入しようとした時のめもです。
キャッシュの手法は 3つあり、
1, ページキャッシュ (ページごとのキャッシュ)
2, アクションキャッシュ (アクションごとのキャッシュ)
3, フラグメントキャッシュ (部品(header, each文等)ごとのキャッシュ)
これだけ覚えておけばよさそう。
今回はindexアクションが遅いということで、
はじめに2のアクションキャッシュを使用してみました。
gem 'actionpack-action_caching'
bundle install
※development環境でもキャッシュを有効にするためにdevelopment.rbの以下をtrueに変更
config.action_controller.perform_caching = true
遅いと原因となっているcontrollerに caches_action :index を追記した。
class SampeController < ApplicationController caches_action :index def index end end
これでページをリロードしてみた。
...
1回目はキャッシュがまだないので当然遅かったが、2回目にかなり早くなって成功!!簡単じゃん。
と自惚れていたら。。。
データを更新してもキャッシュが読み込まれてしまって、変更が反映されていませんでした。。
アクションキャッシュでページの更新を検知し、変更があればキャッシュを書き換える方法もあるとどこかで見ましたが、なんかめんどそうなので、今回は不採用に。
そこでもっと簡単な方法はないかと検索していると、上記3の方法がよしなに変更を検知してくれるらしいとの情報を見つけたので、試してみました(しかもgemが不必要)。
renderに cached: trueを追記
= render partial: "samples/sample", collection: @pending_relations.includes(:influencer, :campaign), cached: true
render先のviewを cache do で囲う
- cache sample do
すると、2回目の表示速度が早くなり、データ更新するとしっかりと反映されるようになりました!