有人可以解释这两个前端 Zend_Cache_Frontend_Capture 和 Zend_Cache_Frontend_Page 之间的区别吗?
Capture 是页面缓存的默认设置......奇怪的是,它使用 get 变量生成 id,但是没有选项可以像页面前端那样设置 make_id_with_get_variables ......
有人可以解释一下吗?
有人可以解释这两个前端 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 框架就不会被用来提供缓存的数据。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 生成它。