好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

smarty缓存

一开始以为smarty只是用来做一些掩饰php代码功能,但是后来才知道还有模板缓存这个强大的功能。

什么是模板缓存呢,就是我们在从数据库里面取出一些数据输出到模板的访问的时候,每一次都对数据库进行访问,但是其实每一次的数据库访问都是相同的,假如网址的流量很大,这种重复的访问完全是没有必要的,对于数据库有很大压力。smarty就提供了缓存技术,用于解决这个问题。

首先使用smarty的缓存,我们有一些要设置的:

开启缓存

$Smarty->caching = true;

设置缓存周期

$Smarty->cache_lifetime = 30;

设置缓存目测

$Smarty->cache_dir = './cache';

然后对于数据库访问的那一部分,我们首先做一次判断,是否已经对此部分进行过缓存了

  • if (! $Smarty ->isCached( '01.html' )){ //判断是否已经进行过缓存,如果已经进行过就不走这里,直接输出模板   
  •      $conn  = mysql_connect( 'localhost' , 'root' , 'root' );  
  •     mysql_query( 'set names utf8' );  
  •     mysql_query( 'use market' );  
  •      $rs  = mysql_query( 'select goods_id,goods_name,shop_price,add_time from goods where goods_id = '  .  $goods_id , $conn );  
  •      $goods  = array ();  
  •      while ( $row  = mysql_fetch_assoc( $rs )){  
  •          $goods [] =  $row ;  
  •     }  
  •      echo   '走了数据库' ;  
  •      $Smarty ->assign('goods);  
  • 但是在smarty的缓存里面还有需要注意的地方,就是假如从地址栏里面get的参数,那么就有可能影响到缓存,多个不同的参数只缓存了第一次生成的,所以这里就需要用到单模板多缓存技术,其实也很简单,只要在
    $Smarty->assign('goods',$goods);这里添加了一个参数,这个参数就是从地址栏获取的,当然,在判断的时候也需要把参数添加进去判断是否已经缓存了$Smarty->isCached('01.html',goods_id);

    那么这个缓存要怎么删除呢,很简单,只需要调用$Smarty->clearCache('01.html',$goods_id),第二个参数可选,假如不填就直接删除这个模板下面的所有缓存。
    最后,有时候在调试程序的时候不缓存,我们也可以设置这个参数用于暂时停止缓存:$Smarty->force_cache = true;

    最后有一点注意,缓存的生命周期是指,在这个时间过了以后,再次刷新这个页面会用新的缓存代替旧的,假如不产生新的缓存,那么旧的缓存是不会自动删除的,所以在实际项目开发中,假如缓存很多的话,其实也是很影响存储的。

    其实我们需要缓存的也只是很少一部分的HTML,现在很多站都使用了memcached来缓存.

     

    查看更多关于smarty缓存的详细内容...

  •   阅读:59次

    上一篇: 关于smarty的原理

    下一篇:smarty高级功能