ShopEx商城系统功能比较丰富,结构也较为复杂,在作为并量很高的网站运营时,瓶颈非常明显,性能跟不上。
在此,以对ShopEx下单过程中运费计算加入缓存优化的过程,举例说明对ShopEx性能优化的方法。
以下代码布署后对访问量大的商城,效果非常明显。
public function getDlTypeByAreaCache( $areaid, $weight = 0, $method_id = null ){
if ( substr( $areaid, 0, 8 ) == "mainland" )
{
$aTmp = explode( ":", $areaid );
$areaid = $aTmp[2];
}
if(!file_exists(HOME_DIR.'/cache/cachedata.delivery_type.php')
|| !file_exists(HOME_DIR.'/cache/cachedata.delivery_area.php')
|| !file_exists(HOME_DIR.'/cache/cachedata.delivery_areaid.php')
){
$rs2 = $this->db->select( "SELECT t.dt_id,t.dt_name, t.has_cod AS pad, t.protect, t.dt_config,
t.dt_expressions AS expressions ,t.detail,t.minprice,t.protect_rate, t.ordernum
FROM sdb_dly_type t WHERE t.disabled = 'false' AND t.dt_status = '1'
AND ( dt_config LIKE '%\"setting\";s:11:\"setting_hda\"%'
OR ( dt_config LIKE '%\"defAreaFee\";i:1%' AND dt_config LIKE '%\"setting\";s:11:\"setting_sda\"%') ) ORDER BY t.ordernum" );
$rsall2=array();
foreach ( $rs2 as $val2 )
{
if ( !$rsall2[$val2['dt_id']])
{
$rsall2[$val2['dt_id']] = $val2;
}
}
file_put_contents(HOME_DIR.'/cache/cachedata.delivery_type.php',serialize($rsall2));
$rs1 = $this->db->select( "SELECT t.dt_id,t.dt_name, t.protect, t.detail ,a.config AS dt_config, t.minprice,t.protect_rate,a.expressions, a.has_cod AS pad, t.ordernum,a.dha_id
FROM sdb_dly_type t INNER JOIN sdb_dly_h_area a ON t.dt_id = a.dt_id
WHERE t.disabled = 'false' AND t.dt_status = '1' ORDER BY t.ordernum ASC , a.dha_id ASC" );
$rsall=array();
foreach ( $rs1 as $val1 )
{
if ( !$rsall[$val1['dt_id']][$val1['dha_id']] )
{
$rsall[$val1['dt_id']][$val1['dha_id']] = $val1;
}
}
file_put_contents(HOME_DIR.'/cache/cachedata.delivery_area.php',serialize($rsall));
$rs1 = $this->db->select( "SELECT t.dt_id,a.areaid_group,a.dha_id
FROM sdb_dly_type t INNER JOIN sdb_dly_h_area a ON t.dt_id = a.dt_id
WHERE t.disabled = 'false' AND t.dt_status = '1' ORDER BY t.ordernum ASC , a.dha_id ASC" );
$rsall=array();
foreach ( $rs1 as $val1 )
{
if ( !$rsall[$val1['dt_id']][$val1['dha_id']] )
{
$rsall[$val1['dt_id']][$val1['dha_id']] = $val1['areaid_group'];
}
}
$delivery_areaid = $rsall;
file_put_contents(HOME_DIR.'/cache/cachedata.delivery_areaid.php',serialize($delivery_areaid));
}else{
$rsall2 = file_get_contents(HOME_DIR.'/cache/cachedata.delivery_type.php');
$rsall2 = unserialize($rsall2);
$rsall = file_get_contents(HOME_DIR.'/cache/cachedata.delivery_area.php');
$rsall = unserialize($rsall);
$delivery_areaid = file_get_contents(HOME_DIR.'/cache/cachedata.delivery_areaid.php');
$delivery_areaid = unserialize($delivery_areaid);
}
$result = array( );
if($method_id){
if($delivery_areaid[$method_id]){
foreach($delivery_areaid[$method_id] as $dha_id=>$areaid_group){
if(!$result[$method_id] && strpos($areaid_group,",".intval( $areaid ).",")!==false) $result[$method_id] = $rsall[$method_id][$dha_id];
}
}
if($rsall2[$method_id]){
$tpConf = unserialize( $rsall2[$method_id]['dt_config'] );
if ( !$result[$method_id] || $tpConf['setting'] == "setting_hda" ){//没有设置或统一设置
$result[$method_id] = $rsall2[$method_id];
}
}
}else{
foreach($delivery_areaid as $dt_id=>$dha){
foreach($delivery_areaid[$dt_id] as $dha_id=>$areaid_group){
if(!$result[$dt_id] && strpos($areaid_group,",".intval( $areaid ).",")!==false) $result[$dt_id] = $rsall[$dt_id][$dha_id];
}
}
foreach($rsall2 as $dt_id=>$rs2){
$tpConf = unserialize( $rs2['dt_config'] );
if ( !$result[$dt_id] || $tpConf['setting'] == "setting_hda" ){//没有设置或统一设置
$result[$dt_id] = $rs2;
}
}
}
$rsall1 = array( );
foreach ( $result as $rsv )
{
$rsall1[$rsv['ordernum']][] = $rsv;
}
ksort( $rsall1 );
$result = array( );
foreach ( $rsall1 as $rsorderv )
{
foreach ( $rsorderv as $rsallv )
{
$result[] = $rsallv;
}
}
//echo '<pre>';echo $areaid;print_r($result); exit();
return $result;
}
声明: 本文由( admin )原创编译,转载请保留链接: ShopEx性能优化之运费计算缓存优化
------====== 本站公告 ======------
联系信息:
电话:19970108113(微信同号) QQ:3142401606
支付宝:https://me.alipay.com/lxq73061
相关插件程序等信息均会在站内发布,敬请关注。