真实世界中的Rails: Rails中的缓存 - 编程入门网
并根据 更改击发逻辑来使一个或多个缓存页面到期失效。清单 5 显示了一种典型的缓存清理器。在此清理器中 ,开发人员可以定义一个活动记录事件,比如 after_save。当此事件击发时,清理器也会击发,并可让 缓存内的特定页面到期失效。这个事例所显示的到期失效基于 expire_page 方法。而很多严格的应用程 序大都直接使用 Ruby 优秀的文件系统实用工具来显式地删除所缓存的页面。
清单 5. 一个典型 的观察器 class CauseController < ApplicationController cache_sweeper :cause_sweeper ... class CauseSweeper < ActionController::Caching::Sweeper observe Cause def after_save(record) expire_page(:controller => ''causes'', :action => ''show'', :id => record.id) cause.nonprofits.each do |nonprofit| expire_page(:controller => ''nonprofits'', :action => ''show'', :id => nonprofit.id) end end end 真实世界中的Rails: Rails中的缓存(5)时间:2011-11-20 Bruce Tate现在,您可能会开始感觉到页面缓存的些许缺点了:复杂性。您虽然可以很好地进行页面级 的缓存,但固有的复杂性却让应用程序很难测试,进而会增加系统内出现 bug 的可能性。而且,如果页 面针对每个用户都会有所不同,或者希望缓存进行过身份验证的页面,那么将需要使用页面缓存之外的方 式。对于 ChangingThePresent,我们必须处理两种情况,原因是我们必须基于用户是否登录来更改基本 布局上的链接。对于大多数页面,我们甚至都不会考虑使用页面级缓存。为了让您能够深入了解页面级的 缓存,在本文的 参考资料 部分,我特意给出了到一系列有关页面级缓存的优秀文章的链接。接下来,将 来深入探究另一种形式的整页缓存 —— 动作缓存。 动作缓存 至此,您已经了解了页面缓存的主要的优势及主要的缺点:对于多数页面检索而言, 根本无需考虑使用 Rails。页面缓存的优势是速度快。缺点是缺少灵活性。如果想要基于应用程序内的条 件 — 例如,身份认证 — 来缓存整个页面,那么可以使用动作缓存。 动作缓存与页 面缓存的工作方式大体相同,但在流程上稍有差别。Rails 在呈现动作前会实际调用控制器。如果由该动 作呈现的页面已经存在于缓存内,那么 Rails 就会在缓存内呈现页面而不是重新加以呈现。由于现在使 用了 Rails,因此动作缓存的速度要比页面缓存慢一些,但其优点还是很明显的。几乎所有的 Rails 认 证模式都会在控制器上使用 before 过滤器。动作缓存让您能够利用认证及控制器上的任何过滤器。 从语句构成的角度来看,动作缓存与页面缓存也应该十分类似,只有指令不太一样。清单 6 显示 了如何使用 caches_action 指令。 清单 6. 启用动作缓存 class AboutController < ApplicationController caches_action :secret_page, :secret_list end 缓存到期失效以及清理器的工作方式也应该相同。我们不使用动作缓存的原因与我们不 使用页面缓存的原因是一样的,但分段缓存对我们来说更重要一些。 真实世界中的Rails: Rails中的缓存(6)时间:2011-11-20 Bruce Tate缓存页面分段 借助部 分缓存,可以缓存页面的一部分,所缓存的内容很多时候都是布局之类的。要使用分段缓存,开发人员需 要先确定分段,方法是通过在 Web 页面上直接放上 rhtml 指令来包围一块内容,如清单 7 所示。在 ChangingThePresent.org 上,我们使用分段缓存来缓存首页和其他的几页。所有的这些页均使用了数据 库密集访问而且大都是我们最受欢迎的页面。 清单 7. 确定缓存分段 <% cache ' |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |