寻找首页片断缓存最佳做法

首页是一个片断缓存大杂烩。

假设某个ar保存或者删除,相应的片段缓存会受到影响,就让受到影响的缓存重新生成。

这就得控制缓存不仅能删除,还可以重新生成。


目前删除做法是这样,取消 $varyByRoute $varyByExpression ,在ar的afterSave和afterDelete里面删除影响到得缓存的Id。

我没有去研究代码,就用了个笨方法。

$str=file_get_contents(‘http://localhost’.CHtml::normalizeUrl(array(’/web/default/index’)),FALSE,$xcontext);

通过这个访问首页,让缓存主动生成。但这样做后,发现系统很不稳定。


主页面舍去了dependency,因为是被动的,当有请求才检查缓存。希望请求来之前,就准备好缓存了。

我研究了 重写COutputCache 的 getCacheKey 只返回自己设置的key 不做其他操作

重写 CController 和 CWidget 的 beginCache 把 ‘COutputCache’ 改成自己扩展的 COutputCache 即可

强 必须要重写COutputCache 的 getCacheKey 吗?没有别的方法?

还有 怎样 在代码里操作,重新生成缓存?

建议beginCache改成,如果有id传进来,则保持原来的id,如果没有才根据$varyByRoute $varyByExpression 来生成Id。

还有 建议 delete方法 支持, 前缀删除,例如 含有某字符串开头的 缓存 被删除。delete(id,prefix)

关于cachekey,我们已经有一个ticket了,希望能保持id。我们会给出一个解决方案的。

提前生成cache呢?让页面一直都存在缓存,我用的


file_get_contents('http://localhost'.CHtml::normalizeUrl(array('/web/default/index')),FALSE,NULL);

来生成,但发现会出错,还没弄明白错误原因。

还发现做的系统很耗内存,不清楚哪里出了问题,请问怎么查看内存情况。