2012-01-22 3 views
0

私は製品ページを持っています。私が持っている場合は、この同じコントローラですべてのビューを追跡するはずのページをキャッシュする方法はありますか?

def show 
    ... 
    LiveView.add_live_view(@product, request) 
    ... 
end 

:showアクションには、次のコードを持っている

caches_action :show, :cache_path => (proc do 
    product_path(params[:id], :user_id => user_signed_in? ? current_user.id : nil) 
end) 

私はrequestからIPアドレスをつかむことで、リアルタイムビューを表示しようとしています。だから、私はページに当たるすべてのビューを追跡する必要があります。ただし、ページが既にキャッシュされている場合は、LiveView.add_live_view(@product, request)メソッドがトリガーされることはありません。

質問があります。私はこの行動をキャッシュするべきですか?もしそうなら、それはどのようにすべきでしょうか?または、この方法のキャッシュを忘れるべきですか?

私は別のキャッシングアプローチを考えてください。助言がありますか?

答えて

0

アプリケーションレベルでのキャッシュが適切なソリューションであるかどうかはわかりません。私はmod_cacheを見て、Apacheのレイヤーでレスポンスをキャッシュすることをお勧めします。 (もしあなたが乗客とともにアパートを走らせているなら)。

最後に、このルールを忘れないでください。あなたがしなければ最適化しないでください。つまり、最初にアプリケーションをテストします。キャッシュしないとパフォーマンスが低下することはありません。あなたはまだすべてをキャッシュする必要がありますか?いくつかのコード分析を行い、おそらくより良いアルゴリズムを使用することができます。

編集して、HTTPステータスコード304も見てください。ユーザーがページを更新し、何も変更されていないことを伝えると、304が返されます。

+0

私はこのルールが好きです。しかし、私は常に 'show'ページをキャッシュするのが最善だと聞いてきました。同じユーザがリロードボタンを押すか、同じページを再度訪問することになると有益です。これについてあなたの考えは何ですか? –

+0

私たちのアプリはHeroku上で動作していることを忘れてしまいました。したがって、アプリケーション層の下にアクセスできるとは思わないでください。 –

+0

まず、何もキャッシュしないことの影響を確認します。また、Webアナリティクスがある場合は、実際にページをリフレッシュする人の数を確認してください。最後に、このページをキャッシュすることを決定した場合は、タイムスタンプをチェックして開始し、何も変更されていない場合は304ステータスを返します。正直なところ、これはほとんどの開発者が忘れていることだと思います。ブラウザのキャッシュはまさにそのためのものです。 –

関連する問題