lixiaolong 发表于 2017-3-20 14:19:46

php > ecshop 缓存

浅谈ecshop的缓存机制
from: http://www.bulian.net/5/156.htm
  我们知道,ecshop的站点打开速度很快,为什么呢?因为他使用了缓存技术,相当于打开了一个编译好的静态页,所以速度很快。
  在后台系统设置里,可以设置缓存的时间,默认为3600秒。如果你在建站初期,经常要调试网站,可以设置缓存时间为0,不缓存。
  打开index.php的源文件,你可以看到
XML/HTML代码

[*]/* 缓存编号 */   
[*]$cache_id = sprintf('%X', crc32($_SESSION['user_rank'] . '-' . $_CFG['lang']));  

  $cache_id就是缓存的ID,根据这个ID,找到缓存的文件。ecshop使用的缓存类似于smarty的缓存机制。当然ecshop把它简单化了。全部写在cls_template.php文件里,
XML/HTML代码

[*]if (!$smarty->is_cached('index.dwt', $cache_id))   
[*]{  

  通过smarty类的is_cached方法判断页面是否重新缓存页面。如果返回false,那么就直接显示缓存的文件。
XML/HTML代码

[*]$smarty->display('index.dwt', $cache_id);  

  这样的缓存,既节省了网页的打开时间,又增加了网站的负载性能。你可以根据网站的实际情况,来设置模板的缓存时间,以提升网站性能。
  但网页有些地方,不能缓存。比如:库存、倒记时、会员的登录状态,购物车等,这些都必须是实时的,ecshop里可以找到lib_insert.php文件,所有不能缓存的地方都写在这里呢。
  比如下面代码
XML/HTML代码

[*]/**   
[*] * 调用购物车信息   
[*] *   
[*] * @access  public   
[*] * @return  string   
[*] */   
[*]function insert_cart_info()   
[*]{   
[*]    $sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .   
[*]           ' FROM ' . $GLOBALS['ecs']->table('cart') .   
[*]           " WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";   
[*]    $row = $GLOBALS['db']->GetRow($sql);   
[*]  
[*]    if ($row)   
[*]    {   
[*]        $number = intval($row['number']);   
[*]        $amount = floatval($row['amount']);   
[*]    }   
[*]    else   
[*]    {   
[*]        $number = 0;   
[*]        $amount = 0;   
[*]    }   
[*]  
[*]    $str = sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false));   
[*]  
[*]    return '<a href="flow.php" title="' . $GLOBALS['_LANG']['view_cart'] . '">' . $str . '</a>';   
[*]}  

  是显示购物车的,在模板里使用{insert name='cart_info'}进行调用。
  另外也可以使用ajax方法实现,此外略过。
  好了,现在你应该理解ecshop模板的缓存机制了吧!
页: [1]
查看完整版本: php > ecshop 缓存