基于rails4.0环境
Rails 页面缓存的方法很多,最近弱弱地尝试了fragment cache,用法还算简单~@_@||
首先,查看config/environment/production.rb
config.action_controller.perform_caching = true
确保上面代码是true状态。
fragment cache是用来对页面进行片段缓存的,首先在你需要缓存的页面加上两行代码,示例如下:
<!-- views/test/index -->
<% cache do %>
…… …… <!-- 页面中需要缓存的界面代码片段 -->
<% end %>
开启服务器后,在控制台可以看到
Read fragment views/793d6c4d2de9d1ed07625eb5944c26d4 (1.0ms)
Write fragment views/793d6c4d2de9d1ed07625eb5944c26d4 (78.0ms)
这说明已经帮你把页面进行缓存,文件名是MD5产生的32加密数
从上面可以看到,它会去寻找缓存页面,如果读不到就会添加到缓存
当你再重新刷新该缓存的页面时,在控制台可以看到
Read fragment views/793d6c4d2de9d1ed07625eb5944c26d4 (2.0ms)
会发现,这次它读到缓存页面了,所以不再write
fragment 缓存默认存放的位置是tmp/cache文件夹中,打开文件夾后看到已经被加密的缓存文件
如果你想在将缓存文件名附上id标识的话,那么只需要做小小的修改
<!-- views/test/index -->
<% cache @id do %>
…… …… <!-- 页面中需要缓存的界面代码片段 -->
<% end %>
加上@id就行~~
在控制台看到的如下:
Read fragment views/2/793d6c4d2de9d1ed07625eb5944c26d4 (1.0ms)
Write fragment views/2/793d6c4d2de9d1ed07625eb5944c26d4 (78.0ms)
上面标识的2就是@id的值~~
当进行更新、创建、删除等操作时,需要对之前缓存页面进行清除
那么只需在controller加上下面这句,
expire_fragment((%r"#{@id}"))
切记,不要写漏了" %r ",因为生成的缓存页面是随机的MD5加密数,去查看缓存页面存放位置的时候,会发现那些文件夹和文件都是加密的,一个文件夹里有一个文件
所以用 %r"#{@id}" 可以找到@id为首的文件夾,例如:“2/(此处省略32位MD5加密数)",然后将其清除
如果想把缓存页面存于,例如:myfile/2 ,”2“表示@id的一个取值,只需要修改如下:
<!-- views/test/index -->
<% cache "myfile#{@id}" do %>
…… …… <!-- 页面中需要缓存的界面代码片段 -->
<% end %>
然后清除缓存的代码改为:
expire_fragment((%r"myfile/#{@id}"))
附:一些不错的知识链接
cache_digests: 解决层层嵌套cache问题,http://blog.xdite.net/posts/2012/09/02/cache-digest-new-strategy
几种cache方法的比较和使用:http://www.sitepoint.com/caching-cache-digest/
ruby -- 进阶学习(十二)fragment cache的更多相关文章
-
ruby -- 进阶学习(二)paperclip上传图片
Need to add image attachments to a model? See how with paperclip in this episode. 在命令行输入: rails g pa ...
-
网站开发进阶(四十二)巧用clear:both
网站开发进阶(四十二)巧用clear:both 前言 我们在制作网页中用div+css或者称xhtml+css都会遇到一些很诡异的情况,明明布局正确,但是整个画面却混乱起来了,有时候在IE6下看的很正 ...
-
Java进阶(三十二) HttpClient使用详解
Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...
-
Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
-
zuul进阶学习(二)
1. zuul进阶学习(二) 1.1. zuul对接apollo 1.1.1. Netflix Archaius 1.1.2. 定期拉 1.2. zuul生产管理实践 1.2.1. zuul网关参考部 ...
-
(转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
-
Scala学习十二——高阶函数
一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...
-
ruby -- 进阶学习(十)自定义路由中:new, :collection和:member的区别
学习链接:http://rubyer.me/blog/583/ RESTful风格的路由动词默认有7个(分别为:index, show, create, new, edit, update, dest ...
-
Android进阶(十二)Fragment VS Activity
Fragment VS Activity Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这 ...
随机推荐
-
App接口中json方式封装通信接口
封装json通信接口的类 <?php class Response{ /** * 按json方式输出通信数据 * @param integer $code状态码 * @param string ...
-
cdoj 851 方老师与素数 bfs
方老师与素数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
-
Cobar是提供关系型数据库(MySQL)分布式服务的中间件
简介 Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明. 产品在阿里巴巴稳定运行3年以上. 接管了3000+ ...
-
SQL2005性能分析一些细节功能你是否有用到?
原文:SQL2005性能分析一些细节功能你是否有用到? 我相信很多朋友对现在越来越大的数据量而感到苦恼,可是总要面对现实啊,包括本人在内的数据库菜鸟们在开发B/S程序时,往往只会关心自己的数据是否正确 ...
-
负载均衡软件LVS分析二(安装)
一. 安装LVS软件 1.安装前准备工作操作系统:统一采用Centos4.4版本.地址规划,如表1所示:表1 更详细的信息如图2所示: 图2 LVS DR模式安装部署结构图 图2中的VIP指的是虚 ...
-
POJ1743 Musical Theme [后缀自动机]
题意:不重叠最长重复子串 后缀数组做法:http://www.cnblogs.com/candy99/p/6227659.html 后缀自动机的话,首先|Right|>=2 然后min(t[u] ...
-
centos7修改网卡名称为eth0
原文链接:https://www.cnblogs.com/freeblogs/p/7881597.html 在安装系统的时候配置: 修改内核选项:net.ifnames=0 biosdevname=0 ...
-
position 有五个值:static、relative、absolute、fixed、inherit。
position 有五个值:static.relative.absolute.fixed.inherit. static 是默认值.就是按正常的布局流从上到下从左到右布局,平常我们做网页时,没有指定 ...
-
Configure,Makefile.am, Makefile.in, Makefile文件
一 软件安装关于 makefile文件问题 如果拿到的工程文件中,没有Makefile文件,而只有configure.in和Makefile.am文件,我们是不能够直接进行编译的,必须根据config ...
-
Unity3D手游开发日记(3) - 场景加载进度条的完美方案
我以为做个进度条很简单,分分钟解决,结果折腾了一天才搞定,Unity有很多坑,要做完美需要逐一解决. 问题1:最简单的方法不能实现100%的进度 用最简单的方法来实现,不能实现100%的进度,原因是U ...