用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3699|回复: 6
收起左侧

关于CI缓存的疑问。

[复制链接]
发表于 2008-11-28 09:01:02 | 显示全部楼层 |阅读模式
我对CI的缓存策略理解的不是很准确,我把我的想法说出来,让大家给评评。
我的理解就是CI是针对URL进行缓存的。当我们需要开启页面缓存的时候。需要在controller的function中的任何位置添加$this->output->cache(n);
例如:
http://www.example.com/index.php/myclass/myfunction  
如果我们在类Myclass的myfunction方法中添加了$this->output->cache(n);后就可以对该页面进行缓存。
但是我的问题来了。如果myfuntion 这个方法有参数的话如何缓存呢?
例如:http://www.example.com/index.php ... rameterA/parameterB
由于参数都是变化的,是无论什么参数都缓存呢,还是只要参数不同就进行不同的缓存么?是不是最终得这样的结论。只要URL是相同的,缓存就是一样的。反之则不同。
请大家多多指教。谢谢!
 楼主| 发表于 2008-11-28 09:23:37 | 显示全部楼层
刚刚做两个一个测试CI的缓存功能的Case,更是奇怪了。

class Test extends Controller {

        function Test()
        {
                parent::Controller();       
        }
       
        function index()
        {
                // TODO
        }

        function testcache($p1=null,$p2=null){
               
                echo 'Test for Caching:'.$p1.' '.$p2;
                $this->output->cache(1);
        }
}

通过浏览器访问: http://localhost/test/testcache/1/1
页面第一次输出结果:Test for Caching:1 1
呵呵,在浏览器点刷新页面,什么都不显示了。过了1分多钟再点刷新页面跟第一次输出的结果一样。然后再点刷新页面,还是什么都没有了。
太郁闷啊,这...这...这好像什么都没有缓存啊。然后我到我的 ...\system\cache\ 目录下确实有缓存文件。
请问各位大侠这到底是什么原因????
发表于 2008-11-28 12:28:28 | 显示全部楼层
Warning: Because of the way CodeIgniter stores content for output, caching will only work if you are generating display for your controller with a view.
发表于 2008-11-28 12:29:06 | 显示全部楼层
有中文的啊

警告: 由于CI存储缓存文件的方式,只有通过 view 文件的输出才能被缓存。
 楼主| 发表于 2008-11-28 12:58:03 | 显示全部楼层

回复 4楼 的帖子

呵呵,我也是才看到这条Warning 。谢谢,提醒!
发表于 2008-11-28 13:38:14 | 显示全部楼层
好像只能缓存view文件
发表于 2009-2-22 03:06:54 | 显示全部楼层
只要在action里加缓存就行了吧
不管你是怎么传参的

本版积分规则