Rails缓存(内容与页面/动作/等)

amf*_*eng 3 ruby caching ruby-on-rails

什么是内容缓存(比如这个插件:http://blog.codahale.com/2006/04/10/content-only-caching-for-rails/)vs Rails内置的页面/动作/片段缓存?

我想在我的Rails应用程序上进行缓存,但我不太清楚要使用哪种类型.我的应用程序主要包含每页上的动态,用户特定数据.缓存甚至可能吗?

mik*_*kej 6

本指南概述了Rails内置的缓存备选方案.但总结如下:


页面缓存:第一次请求控制器操作时,整个生成的页面的副本将写入静态.html文件,以便下次有人请求相同的操作时,Web服务器可以为其提供服务,而无需点击您的Rails应用程序.这是超级快速但有限制,例如,对缓存页面的请求不会通过您的应用程序,因此您不能使用筛选器进行身份验证和限制页面访问.

操作缓存:请求始终从Web服务器传递到Rails应用程序,以便运行过滤器,但如果请求通过过滤器并且操作已缓存,则缓存副本将被覆盖,而不是实际在控制器操作中运行代码.限制:向所有用户提供相同的缓存内容,因此页面不能包含任何个性化数据(例如在标题中显示登录的用户名)

片段缓存:控制器操作的代码运行但在视图中可以缓存页面的各个块.例如,如果我们在侧边栏中有一些计算密集的东西.


您链接的插件会添加额外的粒度.操作内容被缓存但不是布局内容,因此如果布局包含<%= curent_user.full_name %>例如,那么仍将为每个用户个性化.

如果您有大量特定于用户的数据但在一段合理的时间内仍然保持每个用户不变,那么您可以在ActiveRecord查询级别而不是在视图级别查看缓存.