3. 缓存对象
首先,要确认你在全局配置设置了允许缓存项。
我们可以通过Jfactory取得缓存对象
<?php
$cache = & JFactory::getCache();
?>
如果你想在组件中获得缓存,即使全局配置没有启用,你也可以通过以下代码启用缓存:
<?php
$cache->setCaching( 1 );
?>
接下来调用我们的函数
<?php
$rows = $cache->call( array( 'TestClass', 'testMethod' ) );
?>
如果你要缓存一个不是在类中的函数,可以不必使用数组,就如以下的代码
<?php
$rows = $cache->call( 'testFunction' );
?>
可以使用以下代码清除缓存
<?php
$cache->cleanCache();
?>
这将删除缓存目录中的所有缓存的文件和目录。
4. 整合
为了比较,我们将调用两次,一次缓存,一次不缓存,并且我们把两次调用包含在一个profiler中,从而我们可以看清不同。
<?php
class TestClass {
function testMethod() {
$db = & JFactory::getDBO();
for( $i=0; $i<250; $i++) {
$db->setQuery( 'SELECT * FROM #__content' );
$rows = $db->loadObjectList();
}
return $rows;
}
}
$cache = & JFactory::getCache();
$profiler = new JProfiler();
$rows = TestClass::testMethod();
echo $profiler->mark( ' without caching' );
$profiler = new JProfiler();
$rows = $cache->call( array( 'TestClass', 'testMethod' ) );
echo $profiler->mark( ' with caching' );
?>
现在执行 index.php?option=com_testcache. 结果如下:
2.093 without caching
2.160 with caching
第二个稍慢,刷新页面,结果如下:
2.073 without caching
0.008 with caching
在设置的缓存期限内,这个结果大体如此。