Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
0aa78826
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0aa78826
编写于
12月 08, 2010
作者:
X
Xavier Noria
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
makes a pass to the action caching rdoc
上级
3ac844de
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
32 deletion
+41
-32
actionpack/lib/action_controller/caching/actions.rb
actionpack/lib/action_controller/caching/actions.rb
+41
-32
未找到文件。
actionpack/lib/action_controller/caching/actions.rb
浏览文件 @
0aa78826
...
...
@@ -4,25 +4,26 @@ module ActionController #:nodoc:
module
Caching
# Action caching is similar to page caching by the fact that the entire
# output of the response is cached, but unlike page caching, every
# request still goes through
the Action Pack. The key benefit
#
of this is that filters are run before the cache is served, which
# a
llows for authentication and other restrictions on whether someone
#
is allowed to see the cache
. Example:
# request still goes through
Action Pack. The key benefit of this is
#
that filters run before the cache is served, which allows for
# a
uthentication and other restrictions on whether someone is allowed
#
to execute such action
. Example:
#
# class ListsController < ApplicationController
# before_filter :authenticate, :except => :public
#
# caches_page :public
# caches_action :index, :show
, :feed
# caches_action :index, :show
# end
#
# In this example, the
public action doesn't require authentication,
# so it's possible to use the faster page caching
method. But both
#
the show and feed action are to be shielded behind the authenticate
#
filter, so we need to implement those as action caches
.
# In this example, the
+public+ action doesn't require authentication
# so it's possible to use the faster page caching
. On the other hand
#
+index+ and +show+ require authentication. They can still be cached,
#
but we need action caching for them
.
#
# Action caching
internally uses the fragment caching
and an around
# filter to do the job. The fragment cache is named according to
both
# the
current host and the path. So a
page that is accessed at
# Action caching
uses fragment caching internally
and an around
# filter to do the job. The fragment cache is named according to
# the
host and path of the request. A
page that is accessed at
# <tt>http://david.example.com/lists/show/1</tt> will result in a fragment named
# <tt>david.example.com/lists/show/1</tt>. This allows the cacher to
# differentiate between <tt>david.example.com/lists/</tt> and
...
...
@@ -38,19 +39,23 @@ module Caching
# <tt>:action => 'list', :format => :xml</tt>.
#
# You can set modify the default action cache path by passing a
# :cache_path option. This will be passed directly to
# ActionCachePath.path_for. This is handy for actions with multiple
# possible routes that should be cached differently. If a block is
# given, it is called with the current controller instance.
# <tt>:cache_path</tt> option. This will be passed directly to
# <tt>ActionCachePath.path_for</tt>. This is handy for actions with
# multiple possible routes that should be cached differently. If a
# block is given, it is called with the current controller instance.
#
# And you can also use <tt>:if</tt> (or <tt>:unless</tt>) to pass a
# proc that specifies when the action should be cached.
#
# And you can also use :if (or :unless) to pass a Proc that
# specifies when the action should be cached.
# Finally, if you are using memcached, you can also pass <tt>:expires_in</tt>.
#
#
Finally, if you are using memcached, you can also pass :expires_in.
#
The following example depicts some of the points made above:
#
# class ListsController < ApplicationController
# before_filter :authenticate, :except => :public
# caches_page :public
#
# caches_page :public
#
# caches_action :index, :if => proc do |c|
# !c.request.format.json? # cache if is not a JSON request
# end
...
...
@@ -58,24 +63,28 @@ module Caching
# caches_action :show, :cache_path => { :project => 1 },
# :expires_in => 1.hour
#
# caches_action :feed, :cache_path => proc do |c
ontroller
|
# if c
ontroller
.params[:user_id]
# c
ontroller
.send(:user_list_url,
# c
ontroller.params[:user_id], controller
.params[:id])
# caches_action :feed, :cache_path => proc do |c|
# if c.params[:user_id]
# c.send(:user_list_url,
# c
.params[:user_id], c
.params[:id])
# else
# c
ontroller.send(:list_url, controller
.params[:id])
# c
.send(:list_url, c
.params[:id])
# end
# end
# end
#
# If you pass :layout => false, it will only cache your action
# content. It is useful when your layout has dynamic information.
# If you pass <tt>:layout => false</tt>, it will only cache your action
# content. That's useful when your layout has dynamic information.
#
# Warning: If the format of the request is determined by the Accept HTTP
# header the Content-Type of the cached response could be wrong because
# no information about the MIME type is stored in the cache key. So, if
# you first ask for MIME type M in the Accept header, a cache entry is
# created, and then perform a second resquest to the same resource asking
# for a different MIME type, you'd get the content cached for M.
#
# Note: If action caching is being performed for different MIME types
# and those MIME types are being determined by HTTP_ACCEPT header atttribute
# and noth using params[:format] then both the cached data and the content-type
# of the response could be wrong. The safest way to use action caching is to
# pass non-html attribute as params[:format] .
# The <tt>:format</tt> parameter is taken into account though. The safest
# way to cache by MIME type is to pass the format in the route.
module
Actions
extend
ActiveSupport
::
Concern
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录