> CakePHP中文手册 > 视图(View)缓存

View Caching

Section 1 视图(View)缓存

什么是View Cache

从0.10.9.2378_final版本开始,Cake开始支持视图缓存(译注:为了更好的表达,我改用“页面缓存”)。我们没有开玩笑,现在你可以缓存你的页面了,而且可以标记部分视图不被缓存。可以预见当大范围使用该功能时,你的应用程序速度将获得可观的提升。

当对指定URL发起请求时,Cake首先检查该URL是否已经被缓存。如果已经被缓存,Cake绕开分发器(dispatcher)直接返回已经输出并缓存起来的页面。反之,则走正常的流程来输出页面。

如果你已经激活了Cake的缓存机制,Cake会缓存输出的页面已备下次调用。当下一次请求该页面,Cake会从缓存中提取该页面并返回。你是不是在想就那么简单?好吧,让我们来看它是怎么来操作的。

Section 2 Cache是如何工作的

激活缓存

默认情况下,页面缓存机制是被禁用的。为了激活此功能,你首先需要在/app/config/core.PHP中将 CACHE_CHECK 的值设为true。

/app/config/core.php (partial)
define ('CACHE_CHECK', true);

这个变量决定了是否启用页面缓存机制
		

在你希望缓存的视图(View)对应的controller中包含Cache Helper:
var $helpers = array('Cache');

然后你需要指定哪些是需要被缓存的。

Controller中的 $cacheAction 变量
本小节中,我们介绍如何告诉Cake哪些是需要被缓存的。这由为controller中的 $cacheAction 变量的值决定。该变量是一个array,包含了所有希望被缓存的action名字和对应缓存的生命周期。这个时间的值可以是一个一个友好的日期字符串(例如:'1 day' 或者 '60 seconds')。

假设我们有一个ProductsController,其中有几个action希望被缓存。下面的示例代码告诉你应该如何告知Cake哪些该被缓存,注意,Cake的缓存是基于URL的:

视图中缓存标记

有的时候我们希望页面上的部分内容不被缓存。比如你希望新上架的货品能够得到高亮显示,或类似这种具有时间特性的内容,你可以告诉Cake不要缓存这部分内容。

而如何通知Cake呢,很简单,使用将不希望缓存的内容包起来就可以了。

Clearing the cache 清空缓存

首先我们先要告诉你的是,当数据库发生变动时Cake会自动清空缓存。比如有一个视图的信息是从Post model获取的,假如Post model有了INSERT, UPDATE, DELETE操作后,Cake会自动清空该缓存。

但是有的时候可能会需要手动的去清空缓存。Cake为此提供了 clearCache 函数来执行该动作。该函数是一个全局的变量:

Section 3 需要记住的事情

下面是一些你需要记住的事情:

  • 在/app/config/core.php中设置 CACHE_CHECK 为true。
  • 对于希望缓存的Controller必须包含Cache Helper。
  • 配置 $cacheAction 来缓存指定的URL。
  • 使用<cake:nocache> </cake:nocache>来忽略页面上的部分内容不被缓存。
  • 在数据发生变更时,Cake会自动清空相关联的缓存。
  • 可以使用 clearCache() 函数来手动清空缓存。