木兰“页面感知”缓存

时间:2019-12-12 11:36:08

标签: caching magnolia

我正在使用Magnolia v5.7.1,并且刚刚配置了advanced cache module for site aware caching。在此之前,默认行为是在工作空间中发生任何(激活,导入,编辑)情况时刷新所有缓存。使用高级缓存模块,如果更改了特定站点上的任何内容,则仅刷新相应的缓存。到目前为止,一切都很好。

现在,假设页面A和B已被缓存。如果更改了页面A,则将刷新页面A B的缓存(只要两个页面都在同一站点上)。我想知道默认行为不是以下情况是否有充分的理由:如果更改了页面A,则仅刷新页面A的缓存。

我知道可以实现自己的FlushPolicy,但是,这似乎是一项艰巨的任务,也许我错过了无法完成“页面感知”缓存的充分理由。

1 个答案:

答案 0 :(得分:1)

刷新全部内容的一个很好的理由是一页中的更改可能会影响其他页面。例如,这是很常见的。从页面结构生成菜单,因此重命名一页将影响显示菜单的所有页面。或者例如在页面中具有预告片组件,该组件将从其戏弄的页面中提取抽象文本和图像。等等。简而言之,如果不计算依赖关系图,系统将无法知道哪些页面的呈现可能会受其他页面的更改影响。在某些情况下,几乎不可能知道。想象一下事件日历页面,其中包含每个事件的子页面。日历由查询组成,该查询搜索当月的所有事件。由于涉及动态查询,因此依赖性图的计算变得更加复杂。 也就是说,仍然有可能计算依赖关系并仅刷新受影响的页面,但是实际上,在大多数情况下,计算此类图形的工作量(CPU时间)要比简单地全部刷新并重新渲染页面(因为渲染便宜)要大得多(除特殊情况外)。最重要的是,将所有项目都丢弃在缓存中比将它们逐个检索并仅刷新需要刷新的内容要快得多。

TLDR;对于大多数网站而言,尝试进行非常智能的页面缓存管理是不值得的,因为成本超过了无法真正影响性能的收益。