【发布时间】:2010-04-02 05:36:42
【问题描述】:
假设我有这样的代码......
if (!$data = $cache->load("part1_cache_id")) {
$item_id = $model->getItemId();
ob_start();
echo 'Here is the cached item id: '.$item_id;
$data = ob_get_contents();
ob_end_clean();
$cache->save($data, "part1_cache_id");
}
echo $data;
echo never_cache_function($item_id);
if (!$data_2 = $cache->load("part2_cache_id")) {
ob_start();
echo 'Here is the another cached part of the page...';
$data_2 = ob_get_contents();
ob_end_clean();
$cache->save("part2_cache_id");
}
echo $data_2;
据你所见,我需要将 $item_id 变量传递给 never_cache_function,但如果第一个部分被缓存(part1_cache_id),那么我无法获取 $item_id 值。我看到了唯一的解决方案 - 序列化来自第一部分的所有数据(包括 $item_id 值);然后缓存序列化的字符串并在每次执行脚本时对其进行反序列化...
这样的……
if (!$data = $cache->load("part1_cache_id")) {
$item_id = $model->getItemId();
$data['item_id'] = $item_id;
ob_start();
echo 'Here is the cached item id: '.$item_id;
$data['html'] = ob_get_contents();
ob_end_clean();
$cache->save( serialize($data), "part1_cache_id" );
}
$data = unserialize($data);
echo $data['html']
echo never_cache_function($data['item_id']);
还有其他方法可以做到这一点吗? 我正在寻找最高性能的解决方案。
谢谢
更新 另一个问题是 - 如何在不将页面分成两个模板的情况下将这种缓存实现到控制器中?有可能吗?
PS:请不要推荐 Smarty,我对实现自定义缓存真的很感兴趣。
【问题讨论】: