大型网站使用smarty缓存后 速度慢的可能性.
这里说的是我个人经历的一个情况,谨做记忆和参考.
系统采用 windows2k3 php5.2.6 smary2.6.26 zf 1.9.1 mysql 5.0.67
网站目录:
e:/var/html/
application/
library/
public/
缓存文件全部存放在 public下的 cached文件夹下.
最近网站速度明显慢下来了, 但日ip 和pv并没有很明显的增加. 所有配置和程序都没有发生变化...不得解...
在测试中发现,其实页面的缓存文件才几十k, 首也才144k.而首页大约要3秒左右才能打开,这是不能接受的,
分析中.......
如是我把缓存文件全部删除后, 发现速度很快了.难道......
先不管它.....为了验证心中的那个疑问...
晚上十一点多,我再次发现速度慢了下来.
删除全部缓存
神呐....速度马上正常了....
经过总结:
当使用smarty的缓存时, 由于smary的机制是先把模板编译成php文件,然后再进行变量替换生成缓存文件. 这个过程中的耗时取决于程序和数据库的设计.
当缓存文件存在并在其生命周期内时, 前台有请求时, smarty直接输出缓存文件的内容....问题就在这里...
smarty在使用时需要用户自行建立三个文件夹,分别是 模板 编译 缓存. 除了模板可以内部再建立文件夹外, 编译和缓存的内容都是默认
放在指定的目录里的.
当一个系统非常庞大或者数据量巨大的时候, 编译和缓存目录下的文件数也是很大的. 当大到一定的数量级的时候, 由于文件系统和磁盘
的相关因素, 会大大延迟缓存文件的输出. 十万个文件里找一个文件,读出它的内容,什么概念? 一百万个呢?...
我的方案是缓存分级存放!!!
cached / 1
cached / 2
cached / 3
cached / 4
..........
1 2 3 4 对应当前的时间小时数.
每小时内的缓存文件放到对应时间小时数的目录去, 数据量再大些...类推.
今天重新看手册发现有个 use_sub_dirs,
设置 $smarty->use_sub_dirs = true
它会自动分子目录,比较好。。。自己以前疏忽了。
From:http://www.yyga.net/blog/?post=20