zend-framework - Zend_Cache_Frontend_Capture 和 Zend_Cache_Frontend_Page 有什么区别

标签 zend-framework zend-cache

谁能解释一下这两个前端的区别 Zend_Cache_Frontend_Capture 和 Zend_Cache_Frontend_Page?

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

谁能解释一下?

最佳答案

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

首先,让我们看看 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、 session 、GET 或 POST 参数中的信息缓存内容。默认情况下,基于 cookie、session、get 和 post 的缓存是禁用的,因此要使这对登录到您站点的用户有任何影响,您必须告诉缓存是否有任何要基于该缓存的页面信息。

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

总结:

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

  • 如果您不仅要基于请求 URI,还要基于 cookie、 session 数据或获取/发布参数来缓存具有动态输出的页面,请使用页面前端。

希望这很清楚,可以帮助您理解差异。

编辑: 我相信我知道问题出在哪里,但不确定这是否属于错误。

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

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

关于zend-framework - Zend_Cache_Frontend_Capture 和 Zend_Cache_Frontend_Page 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234175/

相关文章:

php - ZF路由问题

javascript - php中remove删除行后如何重新排序序列号

php - Zend_Http_Client 不存储 cookie

zend-framework - Zend_Registry - 你需要 getInstance() 吗?

php - 文件中的 Zend 元数据缓存

php - ZF : Disable Resource Plugin in application. ini

php - 缓存的最佳实践是什么?有什么限制?

php - Zend_Pdf 添加文本链接到 pdf 页面

php - 使用 zend_registry 在缓存内存中设置标志

zend-framework - 是否可以使用 Zend_Cache_Backend_Static 将静态页面缓存为 HTML 来限制 Zend Framework 应用程序的 $_GET 参数数量