Ecshop给我感触最深的就是缓存,弯弯绕绕的页面显示dwt,lbi。代码架构不系统,没有采用任何框架(推荐下平常总结公司用的框架:JOEPHP)。感觉就是ecshop整个逻辑有点乱,如果是在它现成的基础修改功能,困难很大,因为要去重新理解它的逻辑实在费劲。但是做二次开发一般都是时间要求快快快,所以完成需求的时候没有那么多时间去考虑怎么写性能更好,怎么写sql查询才会更优化。ecshop二次开发的时候更关注的是客户的需求,但是仔细做,ecshop还是有很多可取之处。下面我总结下我在二次开发从ecshop学到的东西:
- 业务逻辑思考能力
- smarty缓存
- Ecshop后台分页原理
一、业务逻辑思考能力
二次开发ecshop让我感触最深的就是做新的功能需求时先要分析需求,通过实际的开发,就会越加感受到这个逻辑思考能力重要性,当需要做一个功能时,能清晰的理清功能要求和流程,那么在做事有目标的去做,开发效率会事半功倍。
当接到功能需求的时候,第一件事不是动手去做,先要分析需求的具体的要求,需求功能的该注意的地方,弄清楚这个功能是要干嘛?把整个功能的流程列出来,设计出功能的执行流程和使用的技术,可以用文本文档或者画图把流程记录记录下来(这里我推荐一个任务管理工具TODO)。
二、smarty缓存
ecshop为什么能有着冗余且没有优化的sql查询还能速度不慢,我想主要原因就是ecshop用了模版缓存技术是主要原因之一。下面介绍下ecshop设置缓存的技巧方法。
设置smarty缓存需要4个步骤
1.开启缓存
2.设置缓存的生命周期
3.设置缓存目录
4.判断是否有缓存,没有缓存的时候在重新读取数据
页面缓存:整个页面的全局缓存
1.开启缓存
在ecshop中是通过
define('DEBUG_MODE', 0)
来设置debug模式
其中各种模式的涵义:
0 关闭debug
1 显示错误信息
2 关闭缓存
4 显示debug页面
8 记录sql查询
if ((DEBUG_MODE & ) != 2)
{
$smarty->caching = true;
}
ecshop通过判断debug模式来检查是否开启缓存
2.设置缓存生命周期
ecshop也可以通过设置缓存生命周期时间为0从而关闭缓存
3.设置缓存目录
$smarty->cache_dir = ROOT_PATH . 'temp/caches';
4.判断是否有缓存,没有缓存的时候在重新读取数据
if (!$smarty->is_cached('模版名', $cache_id))
{
// 读取数据并assign赋值
}
$cache_id就是缓存的ID,根据这个ID找到缓存文件,通过is_cached方法判断页面是否重新缓存页面。
通过这种方式缓存,节省了网页的打开时间,但网页有些地方,不能缓存。比如:会员的登录状态、购物车等,有些数据必须是实时的。
局部不缓存
在整个页面缓存的基础上,页面有些数据是需要及时更新的,所以这就需要控制局部不缓存。
ecshop里可以找到lib_insert.php文件,所有不能缓存的地方都写在这里了。echsop就是通过insert方法得到php中对应函数的返回值
具体用法为:在模版中的
{insert name=’xxx’}
的标签可以得到lib_insert.php文件中insert_xxx()函数的返回值。
三、Ecshop后台分页原理
后台分页可以分为以下几个步骤:
1.实现查询分页列表方法,里面可以包括分页,查询等
2.实现显示模版页面
3.实现分页页面