代码之家  ›  专栏  ›  技术社区  ›  amfeng

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

  •  3
  • amfeng  · 技术社区  · 16 年前

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

    我想在我的Rails应用程序上进行缓存,但我不太清楚要使用哪种类型。我的应用程序在每个页面上都有动态的、特定于用户的数据。用这个缓存是否可能?

    1 回复  |  直到 16 年前
        1
  •  6
  •   mikej heading_to_tahiti    16 年前

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


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

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

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


    链接到的插件添加了一个额外的granuality层。将缓存操作内容,但不缓存布局内容,因此如果布局包含 <%= curent_user.full_name %> 例如,对于每个用户,这仍然是个性化的。

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