【问题标题】:Whats is the difference between Zend_Cache_Frontend_Capture and Zend_Cache_Frontend_PageZend_Cache_Frontend_Capture 和 Zend_Cache_Frontend_Page 有什么区别
【发布时间】:2012-03-03 07:11:40
【问题描述】:

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

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

有人能解释一下吗?

【问题讨论】:

    标签: zend-framework zend-cache


    【解决方案1】:

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

    首先,让我们看看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 框架就不会被用来提供缓存的数据。 Apache 根据您的 .htaccess 发现缓存文件存在,并直接将内容提供给用户,而无需调用 PHP。

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

    一旦我创建了一个缓存并告诉它我想基于 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 缓存一个提要副本。 (在上述类方法中查找 $reqUri)。

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

    【讨论】:

    • 谢谢你,画了!这是非常清楚的解释....但是捕获前端缓存get变量是否正常?就我而言,我有一个 RSS 提要,我想对其进行静态缓存,并且我使用 jquery.ticker 插件通过 ajax 获取此提要......现在,这个插件发送一个独特的 get 参数,如 _=1338373213 并且缓存页面是那么 feed?_=1338353213 ...我认为捕获缓存不应该考虑 get、post、cookie 变量,但似乎确实如此......或者我在这里做错了什么?我从 Action_Helper_Cache 调用缓存
    • 它似乎不应该基于请求 URI 的缓存,但我认为 Helper Cache 可能会导致这种情况发生。您能否将一些代码发布到 pastebin 以显示缓存的任何引导配置,以及您如何在控制器中为我使用它?
    • 嗨,德鲁!感谢您的快速回复...这是引导缓存配置link
    • 您是否在控制器中的任何位置调用 $cache->start('name', $tags) 告诉它您想要缓存,或者我只是缺少缓存管理器本身的某些内容。
    • 对不起,我完全错过了那条线,几乎第二次也是如此!我想我明白了问题所在,请参阅我刚才对我的回答所做的编辑。看起来缓存助手正在使用请求 URI(包括查询字符串)来生成缓存 ID。
    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多