什么是Zend_Cache_Frontend_Capture和Zend_Cache_Frontend_Page之间的区别

时间:2012-02-10 20:08:41

标签: zend-framework zend-cache

有人可以解释这两个前端之间的区别 Zend_Cache_Frontend_Capture和Zend_Cache_Frontend_Page?

Capture是页面缓存的默认值...奇怪的是,它使用get变量生成id,但是没有选项来设置make_id_with_get_variables就像它的情况一样 页面前端......

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

这是我努力解释两者之间的差异。

首先,让我们看一下Zend_Cache_Frontend_Capture。该引用声明此类仅适用于Zend_Cache_Backend_Static

您可以使用Zend_Cache_Frontend_Capture来缓存与访问该网站的用户无关的整个网页。当您拥有与当前用户无关的静态数据(可能会不时更改)时,您可以使用此前端,也就是说,它对所有用户都是相同的(例如RSS源或动态创建的JavaScript文件)。

进一步了解Zend_Cache_Backend_Static,你会发现这个后端有点特别。它需要.htaccess文件中的规则来帮助提供缓存。一旦使用Frontend_Capture/Backend_Static缓存了某些内容,就不会使用PHP和Zend Framework来提供缓存数据。 Apache根据您的.htaccess看到缓存文件存在,并直接向用户提供内容而无需调用PHP。

另一方面,

Zend_Cache_Frontend_Page的工作方式不同。有了它,您不仅可以根据请求URI缓存内容,还可以根据cookie,会话,GET或POST参数中的信息缓存内容。默认情况下,禁用基于cookie,会话,获取和发布的缓存,因此为了对登录到您站点的用户产生任何影响,您必须告诉缓存是否有任何页面要基于该缓存进行缓存信息。

一旦我创建了一个缓存并告诉它我想基于cookie和会话进行缓存,我现在可以缓存一个特定于一个用户的动态生成的页面。因此,如果人员A访问/accounts/,则可以为该特定用户缓存该页面,该用户包含从数据库中提取的帐户列表。现在,当B人访问/accounts/时,他们看不到人A的缓存,因此页面现在分别为他们缓存,每个用户的信息都在他们自己的缓存中。

总结:

  • 如果您可以缓存的数据对所有用户都相同,请使用Capture前端。这将是一个更高性能的缓存,因为一旦缓存页面就不需要PHP和ZF。缺点是必须将缓存规则添加到.htaccess

  • 如果您希望使用动态输出缓存页面,不仅要根据请求URI,还要使用Cookie,会话数据或get / post参数来使用页面前端。

希望这一点很清楚并帮助您理解差异。

修改 我相信我看到了问题所在,不确定这是否被归类为错误。

Zend_Controller_Action_Helper_Cache::preDispatch()根据请求URI(包括查询字符串)生成缓存ID。由于jQuery代码将查询字符串附加到URL,因此您将为每个请求URI缓存一个feed的副本。 (在上述类方法中查找$ reqUri)。

我看到了几个选项:1)看看你是否可以让自动收报机不附加查询字符串(至少对于那个特定的URL)或2)手动启动Capture缓存并传递自己的ID,而不是让它缓存助手根据请求URI生成它。