【问题标题】:Rails Caching (content vs. page/action/etc)Rails 缓存(内容与页面/动作/等)
【发布时间】:2010-07-11 03:38:27
【问题描述】:

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

我想在我的 Rails 应用程序上进行缓存,但我不太清楚要使用哪种类型。我的应用程序在每个页面上都有大部分动态的、用户特定的数据。甚至可以缓存吗?

【问题讨论】:

    标签: ruby-on-rails ruby caching


    【解决方案1】:

    This guide 很好地概述了 Rails 的内置缓存替代方案。但总而言之:


    页面缓存:第一次请求控制器操作时,将整个生成页面的副本写入静态 .html 文件,以便下次有人请求相同的操作时,它可以由Web 服务器完全不影响您的 Rails 应用程序。这是超级快,但有限制,例如对缓存页面的请求不会通过您的应用程序,因此您无法使用过滤器进行身份验证和限制页面访问。

    动作缓存:请求总是从 Web 服务器发送到您的 Rails 应用程序,以便您的过滤器运行,但如果请求通过过滤器并且动作被缓存,那么缓存的副本将被服务器而不是实际在您的控制器操作中运行代码。限制:为所有用户提供相同的缓存内容,因此页面不能有任何个性化数据(例如在标题中显示登录的用户名)

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


    您链接到的插件增加了一层额外的粒度。动作内容被缓存,但布局内容不被缓存,因此如果布局包含<%= curent_user.full_name %>,那么这仍然会为每个用户个性化。

    如果您有大量特定于用户的数据,但在合理的时间内每个用户仍保持不变,那么您可以查看 caching at the ActiveRecord query level 而不是视图级别。

    【讨论】:

    • 谢谢!这很有帮助——我一直在寻找类似查询级缓存的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多