2

我已经在“缓存和速度设置”下将“整页缓存”打开为“在所有情况下”,并通过清除缓存并在单独的浏览器中加载我的主页来测试它。但是无论我刷新多少次浏览器,加载时间似乎都保持不变,这让我相信 CMS 仍然会去数据库检索页面,而不是从缓存中检索。

我设法将代码跟踪到 /concrete/src/Cache/Page/PageCache.php 中的这一位

/**
* Note: can't use the User object directly because it might query the database.
* Also can't use the Session wrapper because it starts session which triggers
* before package autoloaders and so certain access entities stored in session
* will break.
*/
public function shouldCheckCache(Request $req) {
    $session = \Config::get('concrete.session.name');
    $r = \Cookie::get($session);
    if ($r) {
        return false;
    }
    return true;
}

如果我强制此函数始终返回 true,我会发现浏览器的后续重新加载会看到更短的加载时间,我相信这表明该页面是从缓存中检索的。

该函数似乎检查是否已设置“CONCRETE5”cookie。如果是这样,那么缓存将被忽略。我真的不明白这一切意味着什么,所以希望有人能帮助阐明我是否做错了什么,或者我应该做什么。

感谢您的任何帮助!

4

1 回答 1

1

存在此问题的最初原因是如果用户登录则完全禁用缓存,今天可能有更好的方法来执行此操作,因此我们可以从 github 中的讨论中受益。

您所看到的特殊性是所有这些都是真实的边缘情况

  • 你没有登录
  • 你有一个会话 cookie
  • 缓存已构建并启用

这通常不会发生在真实站点用户身上,因为从缓存中渲染站点会阻止会话启动。真正测试这一点的方法是在缓存已经构建后打开一个新的隐身选项卡并在您的站点中导航。据我所知,如果缓存失效并且任何一个页面都不是从缓存加载的,那么每个后续请求都会绕过缓存。

Nicolai 是正确的,因为我们可能会受益于让它变得更智能和更健壮,这可能是在 github 上打开一个新的讨论问题的好事情。

编辑:我打开了这个 github 问题进行讨论

于 2015-12-27T19:46:41.247 回答