joomla分析器
为了分析joomla使用cache的差别,我们需要先学会一个工具,那就是JProfiler.JProfiler是joomla的一个分析器。如果你开启joomla的出错系统,你就会清楚JProfiler的输出是什么了。JProfiler主要是用来分析代码执行的时间和消耗的内存的。利用JProfiler我们可以清楚的看到代码执行的速度。
使用JProfiler非常的简单具体的代码如下:
//new 一个分析器的实例 $profiler = new JProfiler(); $rows = test(); //执行你要测试的代码 echo $profiler->mark( ' WithOut Caching')."<br/>"; //调用mark方法,输出测试代码执行的时间
具体的输出结果如下:

JCache类
首先在使用JCache的时候,需要确认你的扩展的缓存设置为 开启状态。这个不是很理解是什么意思?
获得cache对象
$cache = JFactory::getCache();
如果你要你的组件使用缓存,虽然全局设置中禁用了缓存,我们还是可以在代码中进行启用。具体的代码如下:
$cache->setCaching(1);
下一步就是使用缓存进行缓存了。
正常情况下我们执行一个方法获得返回值的代码如下 $result = $obj->functionName($param);现在我们如果要使用cache的话,那么代码需要修改如下:
$result = $cache->call(array('className' ,functionName) ,$param);
如果是一个全局方法 调用就更加简单了
$result = $cache->call("functionName");
当用完cache的时候,可以调用clean进行清除,代码如下:
$cache->clean(); 注意:在joomla官网上使用的是$cache->cleanCache();但实际使用中,会提示出错,没有cleanCache这个方法。因此改为clean().但实际上我执行了这段代码,但是系统并没有删除缓存文件。
测试用例
<?php
// Create the profiler object
$cache = JFactory::getCache();
$cache->setCaching(1);
$profiler = new JProfiler();
$rows = test();
echo $profiler->mark( ' WithOut Caching')."<br/>";
$profiler = new JProfiler();
$rows = $cache->call("test");
// Do Some stuff
echo $profiler->mark(' With Caching')."<br/>";
$cache->clean();
function test()
{
$db = JFactory::getDBO();
for($i = 0 ;$i < 250 ;$i++)
{
$db->setQuery('SELECT * FROM #__content');
$rows = $db->loadObjectList();
}
return $rows;
}
?>
执行的结果就不截图了。
通过测试,我们得到如下结论。第一次执行的时候 不用缓存比用缓存快。第二次执行的时候。使用缓存比不适用缓存大约快400倍。这就是差距。
何时该使用缓存
通过上面的测试,我们知道使用缓存能够加速。但是这是有前提的,那就是每次执行的产生的结果都一样。如果每次结果都不一样,那么使用缓存可能会减慢速度。因此,我们需要明白,并不是每次使用缓存都能提高速度的。这个依据实际情况来定。一个基本的依据是,如果访问的数据库比较大,并且访问比较频繁,那么建议使用缓存。
$this->function需要注意的问题
当我们使用$this->function去缓存一个函数的执行结果的时候。我们需要清楚,系统会将整个对象都保存到文件中,系统通过检测对象的属性是否发生改变来决定是否刷新缓存。如果这个对象包含了一个时间戳,或者是Session ID 或者是一些其他每次都变得东西。那么系统将会自动禁用缓存。
解决这个问题的方式是建立自己的单件对象去储存信息。使用静态的方法来调用。