最近在做一个基于有赞的多级分销管理系统,所有成员的店面均在有赞商城,使用有赞API获得他们的业绩,但是有赞提供的分销只有一级,故制作该系统。考虑到减轻工作量,理清层次关系,采用了OOP设计方法,将数据库,表封装为基类,分销成员,店面等继承表。
但是在列出销售量报表和分销商的时候出现了严重性能问题,由于分销商的业绩奖励是与其下级分销商挂钩的,故封装数据库的时候,进行了DFS遍历来获得所有分销商的关系树,然而,在列出销售报表的时候却并不需要这样的关系,DFS在php语言上的时间花销极大,导致一个页面打开需要10s以上的时间,故对其进行第一步优化,在数据库的封装函数中设置DFS开关:
这个是Database类的部分实现,其中部分敏感数据已隐藏。
<?php
namespace System;
require_once('KdtApiClient.php');
class Database
{
const db_adr="";
const db_usr="";
const db_pwd="";
const db_db="";
public $member=array();
public function init($dfs=true,$store=true)
{
$mysqli=new \mysqli(self::db_adr,self::db_usr,self::db_pwd,self::db_db);
if($mysqli->connect_error) throw new Exception('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
$result=$mysqli->query("select `id` from member_new");
$row=$result->fetch_array();
$i=0;
while($row)
{
$this->member[$i]=new Member($row[0],$dfs,$store);
$row=$result->fetch_array();
$i++;
}
$mysqli->close();
}
static public function doQuery($string)
{
$mysqli=new \mysqli(se