- 浏览: 153155 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mysky1984:
:cry::arrow::idea:
Filter chain skipping --- 跳过过滤器链 -
shaka:
受用,考虑过这个问题没有?如何给过滤器传参数,或者在子类过滤器 ...
Filter chain skipping --- 跳过过滤器链 -
xlth2006@sina.com:
[img][/img][flash=200,200][/fla ...
rails2.0被废弃的用法
expir_xxx 方法会工作的很好,但是在你的“控制器”中它们也要与缓存功能的代码合
作。每次你修改数据库内的一些东西时,你也必须对它可能影响到的被缓存页做些工作。在
应用程序较小时这很容易,但应用程序快速增长时这就会变得很困难。在一个“控制器”内
的修改可能会影响到另一个“控制器”中被缓存的页。“帮助方法”内的商业逻辑,其实不
应该知道有关HTML 页的信息,现在需要担心的是失效被缓存的页。
幸运地,Rails 可以使用sweeper 来简化一些这样的耦合。Sweeper 是你的“模型”对象
上的一个指定“观察者”。当在“模型”内有重要事情发生时,sweeper 会失效依赖于此“模型”数据的被缓存的页。你的应用程序可以根据需要许多sweeper。典型地你会创建一个单独的sweeper 来管理每个“控制器”的缓存。在app/models 目录内放置你的sweeper 代码。
class ArticleSweeper < ActionController::Caching::Sweeper
observe Article
# If we create a new article, the public list
# of articles must be regenerated
def after_create(article)
expire_public_page
end
# If we update an existing article, the cached version
# of that particular article becomes stale
def after_update(article)
expire_article_page(article.id)
end
# Deleting a page means we update the public list
# and blow away the cached article
def after_destroy(article)
expire_public_page
expire_article_page(article.id)
end
private
def expire_public_page
expire_page(:controller => "content", :action => 'public_content')
end
def expire_article_page(article_id)
expire_action(:controller => "content",
:action => "premium_content",:id => article_id)
end
end
sweeper 的工作流程有点费解。
1、sweeper 在一个或多个“活动记录”类上被定义为一个“观察者”。在这个例子中,
它观察Article“模型”(我们在270 页谈论它)。sweeper 使用“钩子”方法来适当地失效被缓存的页。
2、sweeper 也被在一个“控制器”中像下面一样被声明为活跃的。
cache_sweeper directive.
class ContentController < ApplicationController
before_filter :verify_premium_user, :except => :public_content
caches_page :public_content
caches_action :premium_content
cache_sweeper :article_sweeper,
:only => [ :create_article,
:update_article,
:delete_article ]
# ...
3、如果请求来自sweeper 过滤的“动作”中的一个的调用,则sweeper 被激活。如果任
何一个“活动记录”观察者方法被激活,则页和“动作”失效方法将被调用。如果“活动记
录”观察者得到调用,但是当前“动作”没有被选择为一个缓存的sweeper,则sweeper 内
的失效调用被忽略。否则失效有效。
实例
sweeper插件用于自动生成清扫缓存的sweeper类,监视特定的model,根据相应的事件触发其行动,下面是一个example:
1. 首先生成项目和初始数据:
$ rails test_sweeper
$ cd test_sweeper
$ script/generate scaffold post title:string body:text
[/color]
#db/migrate/001_create_posts.rb
(1..50).each do |num|
Post.create(:title => "test#{num}", :body => "Test#{num}")
end
$ rake db:migrate
2. 安装插件:
$ script/plugin install http://topfunky.net/svn/plugins/sweeper
3. 生成Sweeper类,该类在model增删改之后将缓存页面清除:
$ script/generate sweeper post after_save before_destroy
[color=red]
#app/models/post_sweeper.rb
class PostSweeper < ActionController::Caching::Sweeper
observe Post
def after_save(record)
expire_page :controller => 'posts', :action => 'index'
end
def before_destroy(record)
expire_page :controller => 'posts', :action => 'index'
end
end
4. 在controller中指定缓存页面和sweeper类:
[color=red][/color]
#app/controller/posts_controller.rb
caches_page :index
cache_sweeper :post_sweeper
5. 察看效果:
当第一次访问/posts时,server会查询数据库,render页面,并生成cache page:
Cached page: /posts.html (0.00737)
之后再访问/posts时,server就不会再去查询数据库,render页面,而直接去读cache page
直到我们对post做了增删改中任意一个操作,server会删除被cache的page:
Expired page: /posts.html (0.00014)
然后再访问/posts时,server又会去查询数据库,render页面,并生成cache page
作。每次你修改数据库内的一些东西时,你也必须对它可能影响到的被缓存页做些工作。在
应用程序较小时这很容易,但应用程序快速增长时这就会变得很困难。在一个“控制器”内
的修改可能会影响到另一个“控制器”中被缓存的页。“帮助方法”内的商业逻辑,其实不
应该知道有关HTML 页的信息,现在需要担心的是失效被缓存的页。
幸运地,Rails 可以使用sweeper 来简化一些这样的耦合。Sweeper 是你的“模型”对象
上的一个指定“观察者”。当在“模型”内有重要事情发生时,sweeper 会失效依赖于此“模型”数据的被缓存的页。你的应用程序可以根据需要许多sweeper。典型地你会创建一个单独的sweeper 来管理每个“控制器”的缓存。在app/models 目录内放置你的sweeper 代码。
class ArticleSweeper < ActionController::Caching::Sweeper
observe Article
# If we create a new article, the public list
# of articles must be regenerated
def after_create(article)
expire_public_page
end
# If we update an existing article, the cached version
# of that particular article becomes stale
def after_update(article)
expire_article_page(article.id)
end
# Deleting a page means we update the public list
# and blow away the cached article
def after_destroy(article)
expire_public_page
expire_article_page(article.id)
end
private
def expire_public_page
expire_page(:controller => "content", :action => 'public_content')
end
def expire_article_page(article_id)
expire_action(:controller => "content",
:action => "premium_content",:id => article_id)
end
end
sweeper 的工作流程有点费解。
1、sweeper 在一个或多个“活动记录”类上被定义为一个“观察者”。在这个例子中,
它观察Article“模型”(我们在270 页谈论它)。sweeper 使用“钩子”方法来适当地失效被缓存的页。
2、sweeper 也被在一个“控制器”中像下面一样被声明为活跃的。
cache_sweeper directive.
class ContentController < ApplicationController
before_filter :verify_premium_user, :except => :public_content
caches_page :public_content
caches_action :premium_content
cache_sweeper :article_sweeper,
:only => [ :create_article,
:update_article,
:delete_article ]
# ...
3、如果请求来自sweeper 过滤的“动作”中的一个的调用,则sweeper 被激活。如果任
何一个“活动记录”观察者方法被激活,则页和“动作”失效方法将被调用。如果“活动记
录”观察者得到调用,但是当前“动作”没有被选择为一个缓存的sweeper,则sweeper 内
的失效调用被忽略。否则失效有效。
实例
sweeper插件用于自动生成清扫缓存的sweeper类,监视特定的model,根据相应的事件触发其行动,下面是一个example:
1. 首先生成项目和初始数据:
$ rails test_sweeper
$ cd test_sweeper
$ script/generate scaffold post title:string body:text
[/color]
#db/migrate/001_create_posts.rb
(1..50).each do |num|
Post.create(:title => "test#{num}", :body => "Test#{num}")
end
$ rake db:migrate
2. 安装插件:
$ script/plugin install http://topfunky.net/svn/plugins/sweeper
3. 生成Sweeper类,该类在model增删改之后将缓存页面清除:
$ script/generate sweeper post after_save before_destroy
[color=red]
#app/models/post_sweeper.rb
class PostSweeper < ActionController::Caching::Sweeper
observe Post
def after_save(record)
expire_page :controller => 'posts', :action => 'index'
end
def before_destroy(record)
expire_page :controller => 'posts', :action => 'index'
end
end
4. 在controller中指定缓存页面和sweeper类:
[color=red][/color]
#app/controller/posts_controller.rb
caches_page :index
cache_sweeper :post_sweeper
5. 察看效果:
当第一次访问/posts时,server会查询数据库,render页面,并生成cache page:
Cached page: /posts.html (0.00737)
之后再访问/posts时,server就不会再去查询数据库,render页面,而直接去读cache page
直到我们对post做了增删改中任意一个操作,server会删除被cache的page:
Expired page: /posts.html (0.00014)
然后再访问/posts时,server又会去查询数据库,render页面,并生成cache page
发表评论
-
Magic Column Names(自动的列名)
2008-08-10 16:09 2839在课程的最后两章我们会提到很多列名字,它们对“活动记录”有重大 ... -
Callback Objects
2008-08-10 16:04 2912可在“模型”类内直接 ... -
Timestamping Records
2008-08-10 15:57 2778before_create 和before_update 回调 ... -
Callbacks
2008-08-10 15:46 2829“活动记录”控制“模 ... -
“聚合”(Aggregation)
2008-08-07 00:20 4249数据库列有个带限制的类型集: integers, string ... -
acts as list/acts as tree
2008-08-07 00:03 3959Acts As List 在子表中使 ... -
基于时间缓存
2008-08-06 00:18 2778def index when_fragment_expir ... -
Caching(缓存)“缓存”什么
2008-08-02 17:24 3302相关文献(http://www.ibm.com/develop ... -
verify(验证)
2008-08-01 14:18 2982before“过滤器”的通常 ... -
“过滤器”(before,after,around)
2008-08-01 14:18 4006“过滤器”可以让你在你的“控制器”内写代码来包装由“动作”完成 ... -
Flash—“动作”间的通信
2008-08-01 13:37 2954Flash—“动作”间的通信 当我们使用redirect_to ... -
“会话”存储比较和失效与清理
2008-07-31 22:58 3158比较“会话”存储选项 ... -
“会话”存储
2008-07-31 22:56 2961在存储你的“会话”数据时,Rails 有很多选项。每个选项即好 ... -
“会话”session
2008-07-31 22:54 3587Rails 的“会话”是个类 ... -
cookies
2008-07-31 22:40 3264Cookie 允许web 应用程序 ... -
对用户应答(1,2,3)
2008-07-30 00:36 1082“控制器”的一部分工作是响应用户。有三个基本方式来完成个工作: ... -
应答3-重定向(redirect_to)
2008-07-30 00:34 2743一个HTTP redirect 被从服 ... -
应答2-发送文件和其它数据(send_data)
2008-07-30 00:25 1912我们已经看了在“控制器”内提交模板(render)和发送字符串 ... -
应答1-提交模板(render)方法
2008-07-29 23:52 2136模板是个文件,它定义 ... -
开发环境中的预设对象(request、params)
2008-07-29 23:33 2214“控制器”为“动作”设置环境。环境被建立在实例变量内,但你应该 ...
相关推荐
Driver.Sweeper.v0.90.CHS 是一个专门针对驱动程序卸载的汉化工具,尤其适合处理那些常规方法难以卸载的驱动。这款工具以其强大和高效的功能,在IT领域中受到了用户的广泛欢迎,尤其是对于需要频繁安装和卸载驱动的...
驱动卸载工具Driver Sweeper v1.5.0 Driver Sweeper是Guru3D网站开发的一款驱动程序卸载工具,可以彻底清除系统内残留的一些旧驱动,非常适合升级驱动或更换硬件的情况。Driver Sweeper目前支持Ageia Physx物理卡、...
Driver Sweeper是Driver Cleaner的继任者。同样是一款非常实用的驱动程序清理工具,主要用来清理不能够被完全卸载的驱动文件,降低了更新不同版本驱动对系统造成的不稳定性。目前它可以支持NVIDIA、NVIDIAChipset、...
Data Sweeper一款能完全销毁数据软件,防止资料泄露,储存在硬盘上的数据是不能简单的销毁的,即使你对硬盘格式化,数据本身仍是残留在硬盘上的。Data Sweeper就能帮您完全销毁这些顽固的数据。
Driver Sweeper是一款专业的驱动程序清理工具,主要用于帮助用户卸载并清理系统中的多余或无用驱动程序,以保持系统的高效运行和整洁。在Windows操作系统中,驱动程序是硬件设备与操作系统之间的桥梁,它们使得硬件...
mine sweeper演示视频
这个“mine_sweeper.zip”压缩包包含了构建Android版扫雷游戏的所有源代码,为开发者提供了一个深入理解Android应用开发和游戏逻辑实现的实例。 首先,让我们探讨一下Android开发的基础。Android是一个基于Linux的...
专业强效移除显卡驱动,amd,nvida。方便快捷,免安装。卡巴到此取经。
【Tune Sweeper for Mac_v4.24.0】是一款专为苹果Mac操作系统设计的高效音乐管理软件,它的主要功能在于帮助用户整理并优化他们的iTunes音乐库,确保音乐收藏的整洁与有序。该软件的最新版本4.24.0提供了更强大的...
一个小巧windows系统垃圾清除器 <br>*可以设定开关机处理垃圾 *有深度处理功能 *全自动 *安全高效率 *是写代码人氏的最好帮手
软件介绍 高效而独立的进行检测、移除、阻挡这些间谍软件的工具,它通过经常更新的包含数千间谍软件资料的数据库全面扫描你的计算机,扫描出的间谍/广告软件马上被隔离并被中止,以便你删除他们,同时恢复正常程序...
2. **单例模式**:用于确保游戏中只有一个实例,如游戏板对象,避免多实例冲突。 六、调试与测试 1. **单元测试**:编写测试用例验证各个功能模块的正确性,如雷的生成、单元格状态的转换等。 2. **集成测试**:...
Driver Sweeper是Driver Cleaner的继任者。同样是一款非常实用的驱动程序清理工具,主要用来清理不能够被完全卸载的驱动文件,降低了更新不同版本驱动对系统造成的不稳定性。目前它可以支持NVIDIA、NVIDIAChipset、...
History Sweeper 是一个可以清除你计算机中无用文件和历史记录的一个非常小巧的软件,如注册表无用项,文档、运行、查找记录。清理的非常快速、安全。
Mine Sweeper in C programming.
代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机代码 unity...
Driver Sweeper (驱动程序清理工具) V2.5.0 多国语言版 软件大小: 4.7 MB 软件语言: 多国语言[中文] 软件性质: 国外软件 软件授权: 免费软件 应用平台: Win7 / Vista / Win2003 / WinXP 软件MD5: D8AF5F...
033 The Shepherdess and the Chimney Sweeper.doc
小学英语英语故事童话故事TheShepherdessandtheChimney_Sweeper