本文概述
- 页面缓存
- 动作缓存
- 片段缓存
Rails缓存可用于三个粒度级别:
- 页
- 行动
- 分段
通过使用caches_ page方法调用, 可以为控制器类中的任何方法打开页面缓存。传递了需要作为cache_page的参数进行缓存的操作。无需包括你所有控制器的动作。
例:
步骤1创建一个应用程序MyCache -T
rails new MyCache -T
步骤2通过运行以下命令打开缓存。此命令在tmp目录中创建一个空的caching-dev.txt文件。
rake dev:cache
步骤3转到config / environments / development.rb文件并编写以下代码:
if Rails.root.join('tmp/caching-dev.txt').exist?
config.action_controller.perform_caching = true
config.action_mailer.perform_caching = false
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' =>
'public, max-age=172800'
}
else
config.action_controller.perform_caching = false
config.action_mailer.perform_caching = false
config.cache_store = :null_store
end
步骤4转到Gemfile, 添加以下行。
gem 'actionpack-page_caching'
步骤5运行捆绑安装。
bundle install
步骤6在config / application.rb文件中编写以下代码。它将指定要保存缓存页面的位置。
config.action_controller.page_cache_directory = "#{Rails.root.to_s}/public/deploy"
步骤7我们将在这里介绍一个控制器。运行以下命令:
rails generate controller page
步骤8在app / page_controller.rb文件中, 编写以下代码。
class PageController <
ApplicationController
def index
end
end
步骤9我们将在这里介绍一个控制器。运行以下命令:
root 'page#index'
步骤10转到views / page / index.html.erb文件。
<
h1>
Welcome to our Cached example tutorial.<
/h1>
步骤11通过caches_page方法启用页面缓存。转到控制器文件并编写以下代码:
class PageController <
ApplicationController
caches_page index
end
步骤12启动服务器。
rails s
步骤13在本地主机上运行它。
localhost:3000
文章图片
动作缓存 Rails动作缓存可保存动作响应(如页面缓存)的整个输出。操作缓存只有一个区别, 操作调用仍被路由到控制器, 因此仍可以应用任何过滤器。通过使用caches_ action方法调用, 可以为控制器类中的任何方法打开操作缓存。
例:
我们将继续上面的示例。
步骤14转到Gemfile, 编写以下代码。
gem 'actionpack-action_caching'
【Rails 3种缓存用法和实例】步骤15运行捆绑安装。
bundle install
步骤16要使用动作缓存, 让我们创建一个新的受限页面。在控制器文件中编写以下代码。
class PageController <
ApplicationController
before_action :authenticate!, only: [:restricted]caches_page :index
caches_action :restricted def index
end def restricted
end private def authenticate!
params[:admin] == 'true'
end
end
步骤17创建app / views / page / restricted.html.erb文件。
<
h1>
This is restricted page created for action caching.<
/h1>
步骤18转到config / routes.rb文件并编写以下代码。
get '/restricted', to: 'pages#restricted'
步骤19启动服务器。
rails s
步骤20在本地主机上运行它。
Localhost:3000/restricted
文章图片
片段缓存 Rails片段缓存用于在模板中缓存块, 而不是缓存动作方法的整个输出。当你需要频繁更改操作的某些部分而无法缓存, 而其他部分由于它们保持静态而需要缓存时, 这很有用。
它是在视图模板而不是控制器类中完成的。片段缓存由cache_do块指定。 cache_do语句中包含的块内的行将被缓存。
例:
我们将继续上面的示例。
步骤21创建一个名为frag的新模型。
rails g model Frag title:string
步骤22运行migrate命令。
rake db:migrate
步骤23转到app / controllers / frags_controller.rb文件。
class FragsController <
ApplicationController
def index
@frags = Frag.all
end
end
步骤24转到config / routes.rb文件。添加以下行。
resources :frags, only: [:index]
步骤25转到app / views / frags / index.html.erb文件。
<
h1>
Fragments<
/h1>
<
% @frags.each do |frag| %>
<
%= frag.title %>
<
% end %>
步骤26转到db / seeds.rb文件以填充片段表。
20.times {|i| Frag.create!({title: "Frag #{i + 1}"})}
步骤27运行rake命令。
rake db:seed
步骤28如果我们要缓存页面上列出的每个片段, 将使用缓存方法来完成。
转到app / views / frags / index.html.erb文件。
<
% @frags.each do |frag| %>
<
% cache frag do %>
<
%= frag.title %>
<
% end %>
<
% end %>
步骤29当对象传递给缓存方法时, 它会自动获取其ID并生成适当的缓存键。如果片段已更新, 则缓存将自动过期。
在app / views / frags / index.html.erb文件中将渲染方法与缓存选项一起使用。
<
%= render @frags, cached: true %>
下载
下载此示例
推荐阅读
- Rails文件上传实例详细图解
- Ruby on Rails 5 Hello World示例
- Rails脚本工具使用介绍
- Ruby on Rails RVM版本管理用法
- Ruby on Rails MVC开发基本概念
- Rails IDE或编辑器介绍
- Ruby Active Record解释和用法例子
- Ruby on Rails目录结构解释
- Ruby on Rails捆绑器bundler用法