最近网站general listing程序执行的速度比较慢,主要原因是在关联表数量太多,数据库的压力大造成的。
Ok 进入正题:
原先页面程序执行时间为2s+;
第一步;我分析了下程序,没看出有什么语句上的问题;
第二步:转而查数据库,发现产品与产品属性的关联表有一个字段没加索引,加好后速度明显提升,大概是1s+
可是还不行啊,程序就要消耗掉1s的时间;
在此我简单介绍下我的网站架构
底层:Zend Framework + 自写底层类库;
View层用的是Smarty;
思考下,问题主要是在与数据的查询上出的,也就是说在把数据给Smarty之前花掉了大量时间;那我们如果能把这部分数据缓存下来,岂不是完美;
这样理解:
原来是:接收请求->分析请求->查询数据库->处理数据->Smarty->页面
现在呢:接收请求->缓存数据->Smarty->页面
也就是 缓存数据==分析请求->查询数据库->处理数据
做好后程序执行时间由1s变成0.008s
2s/0.008s = ?
对就是200多倍;
虽然smarty由cache的功能,但是对与一个动态的电子上午网站根本就不适合,为什么?有兴趣的可以把smarty的cache设置为true 试试看,呵呵~
数据缓存类似于用c或其他的写数据库与程序中间件方法;但是这种个人感觉又优于中间件。
还有呢:数据缓存+SMARTY 个人感觉比较理想 因为Smarty编译好后成为php脚本本身时间不要消耗很长 如果哪位仁兄正用着ZP来加速 那岂不更爽?
当然也有缺点,缓存过期后第一个访问网站的人会稍微感觉有些慢 也就是原来优化后的1s 但是一个几百万pv的网站 一个人偶尔某个页面访问慢总比都慢好吧
数据缓存的方法有很多,我用的是Zend Cache,如果你的内存够大,也可用APC扩展将缓存数据放入内存。更快了~
个人不才,望高手看后可以给予更多的指正,也欢迎一起讨论~
