需要缓存的
- 全静态页面
- 数据库密集访问 但又几乎无变化的动态页面
- 动态页面的片段
开发环境开启缓存
/config/environments/development.rb
config.action_controller.perform_caching = true
如果动态页面不经常更改,可以使用页面级的缓存。Page Cache AND Fragment Cache
页面和分段缓存二者均在控制器级别发生。
清单 1. 页面缓存 Page Cache
class FooController < ApplicationController caches_page :privacy_policy, :user_agreement end
清单 2. 分段缓存 Fragment Cache 【不涉及request 的动态params】
<% cache 'gifts_index' do %> <h3> Here, you can make the world a better place with a single gift. Donation gifts are also a wonderful way to honor friends and family. Just imagine what we can achieve together. </h3> <h2 class="lightBlue"><%= @event_title %></h2> <div id="homefeatureitems"> <% for gift in @event_gifts %> <%= render :partial => 'gifts/listable', :locals => { :gift => gift } %> <% end %> </div> ... <% end %>
清单 3. 分段缓存 Fragment Cache 【URL标识】
<% cache @cause.permalink(params[:id]) do %>
页面缓存优势是速度快。缺点是伪静态,不走后台。
实际上,很多action都有before filter。如果要先身份认证才能访问页面,页面缓存不行。
动作缓存让你能够利用控制器上的任何过滤器。
清单 4. 动作缓存
class FoooController < ApplicationController caches_action :secret_page, :secret_list end
最后 cache expire
- 缓存到期失效
- 数据更新
清单 5. 基于时间的缓存到期
# -*- encoding : utf-8 -*- class HomeController < ApplicationController layout "home_manage" skip_before_filter :verify_authenticity_token, :only => [:upload_img] caches_action :index, :expires_in => 1.days # before_filter :get_vote end
清单 6. 使缓存失效
# -*- encoding : utf-8 -*- class HomeSweeper < ActionController::Caching::Sweeper observe HomeRecommend, HomeKv, HomeBanner, FitLiteral, FitImage, Question, OwnerEnter, HomeImageLibPhoto, HomeDesignShow, HomeLifeVideo, IBanner def after_create(model) # expire_action("/index") expire_index end def after_update(model) # expire_action("/index") expire_index end def after_destroy(model) # expire_action("/index") expire_index end def expire_index cache_key = "views/#{request.host_with_port}/index" Rails.cache.delete(cache_key) end end
参考链接:
https://www.ibm.com/developerworks/cn/web/wa-rails1/
相关推荐
在 Ruby on Rails 中,页面缓存是一种优化性能的技术,尤其适用于那些内容相对静态或者对用户个性化要求不高的网页。页面缓存的工作原理是将动态生成的 HTML 页面直接保存到服务器的文件系统中,后续的相同请求可以...
如果记录不在缓存中,RecordCache会执行数据库查询,获取记录,序列化后存储,并返回给请求者。 **RecordCache的安装与配置** 在Rails 3项目中使用RecordCache,首先需要通过Gemfile添加依赖: ```ruby gem '...
### Rails缓存架构设计 #### 一、高性能Web应用与缓存架构的重要意义 在现代互联网环境下,构建高性能Web应用面临着前所未有的挑战。随着用户数量的激增和技术的发展,Web应用不仅需要处理大规模且高并发的访问...
从给定的文件内容中,我们可以详细解读Ruby on Rails中的几种缓存机制,并结合IBM官方网站的技术文档,理解其在实践中的应用。 首先,对于全静态页面的缓存,这通常是通过Web服务器完成的,而不是Rails本身。在...
Spring是Rails的预加载器。Spring 能够通过保持应用运行在后台,来提升开发模式下的速度。使得不需要在执行test,rake task以及migration时每次都加载。 标签:Spring
Ruby on Rails:Rails性能优化与缓存策略.docx
至于性能优化,Rails提供了缓存机制,包括页面缓存、片段缓存和动作缓存,以减少服务器负载。还可以利用ActionCable实现WebSocket通信,实现实时数据传输。 最后,Rails API的应用往往需要与前端框架如React、Vue....
9. **Caching**:为了提高查询效率,Rails支持查询缓存,可以缓存特定查询的结果,避免重复执行相同的数据库操作。 10. **SQL注入防范**:Rails通过绑定参数的方式防止SQL注入,如`Model.where(id: params[:id])`,...
在Rails项目中,我们首先需要了解的是项目的目录结构。一个标准的Rails应用会包含以下关键部分: 1. **app**:应用程序的核心,包括模型(models)、视图(views)和控制器(controllers)。模型负责业务逻辑和数据...
在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种用户交互功能,例如三级联动选择,这在处理如中国省市区这样的地理数据时尤其常见。这篇博客文章“Rails中应用Ext.tree:以中国的省市地区三级联动选择为...
该文档详细介绍了Rails 2.1版本中引入的新特性和改进之处,对于Rails开发者来说,是一份非常有价值的参考资料。 #### 新特性介绍 **时间区(Timezones)** Rails 2.1增加了对时区的支持,这意味着应用程序可以更...
- **Rails中的REST实现**:Rails默认遵循REST原则,通过资源路由和标准的控制器动作支持常见的CRUD操作。 - **资源和表示**:讨论如何将数据建模为资源,并如何通过不同的HTTP方法处理这些资源的不同状态。 **4. ...
默认值是曾经存储在该Rails进程的本地内存中的缓存的内存存储。 这样做的问题是,在生产中,我们经常有多个Rails实例在运行,并且每个实例都会有自己的缓存存储,这并不是对资源的充分利用。 文件存储适用于较小的...
书中会介绍如何通过缓存(如Action Cache和Page Cache)、数据库查询优化、资产管道优化等手段提升应用性能。 2. **复杂的路由**:Rails的路由系统允许灵活地定义资源和URL结构。高级Rails会讲解如何创建更复杂的...
在使用缓存时,需要注意数据一致性问题,避免缓存中的过时数据导致用户看到错误信息。此外,敏感数据应加密存储,防止缓存被窃取。 10. **实际应用示例** 例如,在处理商品列表时,可以对热门商品的列表进行缓存...
rails应用通常包括前端、后端、数据库以及可能的缓存机制。在rails高可用的配置中,我们会涉及以下几个关键组件: 1. 负载均衡器:负载均衡器是高可用架构中的第一道防线,它负责将外部的请求分发到多个服务器上,...
在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...