首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend_Cache_Frontend_Capture和Zend_Cache_Frontend_Page之间的区别是什么

Zend_Cache_Frontend_Capture和Zend_Cache_Frontend_Page之间的区别是什么
EN

Stack Overflow用户
提问于 2012-02-11 04:08:41
回答 1查看 447关注 0票数 3

有人能解释一下这两个前端Zend_Cache_Frontend_Capture和Zend_Cache_Frontend_Page之间的区别吗?

捕获是页面缓存的默认捕获...奇怪的是,它使用get变量来设置id,但没有像在页面前端那样设置make_id_with_get_variables的选项……

有人能解释一下吗?

EN

回答 1

Stack Overflow用户

发布于 2012-02-11 06:25:16

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

首先,让我们看一下Zend_Cache_Frontend_Capture。参考声明这个类被设计成只能与Zend_Cache_Backend_Static一起使用。

您可以使用Zend_Cache_Frontend_Capture来缓存与访问站点的用户无关的整个页面。当您有与当前用户无关的静态数据(可能会随时更改)时,也就是说,它对所有用户都是相同的(例如,RSS feed或动态创建的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、会话、get和post的缓存是禁用的,因此,要使这对登录到您的站点的用户产生任何影响,您必须根据这些信息告诉缓存是否有要缓存的页面。

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

总结:

当您可以缓存对所有用户都相同的数据时,

  • 将使用捕获前端。这将是一个更高性能的缓存,因为一旦页面被缓存,就不再需要PHP和ZF。缺点是,如果您希望不仅基于请求URI,而且还基于cookie、会话数据或get/post参数来缓存具有动态输出的页面,则必须向.htaccess
  • Use页面前端添加缓存规则。

希望这一点很清楚,并能帮助您理解其中的差异。

编辑:我相信我知道问题出在哪里了,不过我不确定这是不是一个bug。

Zend_Controller_Action_Helper_Cache::preDispatch()根据请求URI (包括查询字符串)生成缓存ID。由于jQuery滚动条将一个查询字符串附加到该URI,因此您将为每个请求URI缓存一份提要副本。(在前面提到的类方法中查找$reqUri )。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9234175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档