gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:42:30 26 4
gpt4 key购买 nike

谁能解释一下这两个前端的区别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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com