spt119
发表于 2011-6-23 09:05:05
曾有测试结论PHP操作XML的效果不佳。不知道测试的基础是PHP4还是PHP5,是利用DOM,还是XML对象。
在PHP5条件下,PHP操作XML的速度还是可以接受的,至少在我本地测试环境和实际运行的Linux服务器下,没发现明显的系统拖慢(本例使用XML对象)。而且系统越大,降低的数据库次数越多。当一个程序需要读取20次数据库才能最终显示在客户端浏览器上,如果可以降低10次,意义是不言而喻的。
利用AR开启数据库的缓存也是一个不错的解决方案,但这对于虚拟主机用户来说,有点不现实。
昨夜渡轮
发表于 2011-6-25 08:13:29
我的方法是把数组生成为指定的文本,这样可以直接调用数组,方法更简单,就是thinkphp里面的"快速缓存"功能,cache(内容, 保存的文件名); 只有一个函数非常的方便,都不用解析XML这一步,函数里是直接
调用文本中的数组取值。
as3291363
发表于 2011-6-25 10:07:45
看来各位做cache都深有感触啊...
spt119
发表于 2011-6-26 15:52:12
文本类型的cache,用file_get_content函数读内容,最后转变成关联数组。
xml,则是用simplexml_load_file读取,最后转变成关联数组。
具体到底哪个函数的效率更高,这个还真没测试过。有机会测试一下。
再有,这篇文章的主要思想不是缓存全部的数据库,只是缓存在规定时间内变化不大,或基本不变的表数据缓存。
jeongee
发表于 2011-7-5 17:09:52
spt119 发表于 2011-6-26 15:52 static/image/common/back.gif
文本类型的cache,用file_get_content函数读内容,最后转变成关联数组。
xml,则是用simplexml_load_file读 ...
文本类型的不需要file_get_contents
使用的时候用var_export直接将数组变成文本,file_put_contens进去,使用的时候只需要include以下就可以了
spt119
发表于 2011-7-6 12:59:17
jeongee 发表于 2011-7-5 17:09 static/image/common/back.gif
文本类型的不需要file_get_contents
使用的时候用var_export直接将数组变成文本,file_put_contens进去, ...
我说用file_get_contents是tp的文本缓存模式。不是泛指都需要这种模式。
还可以直接缓存成后缀名为php的文件保存数组。这主要看缓存的设计目的,而不是都需要一样的模式。
jeongee
发表于 2011-7-6 13:07:04
spt119 发表于 2011-7-6 12:59 static/image/common/back.gif
我说用file_get_contents是tp的文本缓存模式。不是泛指都需要这种模式。
还可以直接缓存成后缀名为php的 ...
啊哦,我也没说都是一样的模式呀:dizzy:
saturn
发表于 2011-7-18 11:55:59
不错的方案,不过我觉得再整理下这就是个更好的文章。
我们撇开性能问题不谈,你这样用XML形式做缓存和以文本形式保存序列化后的数组/对象缓存有本质的区别吗?
从你给的例子里面是没有的,无非是两种不同形式的文本而已。
实际上我们可以利用xml跨平台的特性和xml本身的优势做一些文本和其他类型缓存做不到的事情,比如:
1. 我们可以通过XSLT直接将xml转化和输出成为html网页文件或者其他文本,实现了表现与内容的分离。
2. 在一个异构的系统环境下,我们还可以通过xml作为中间媒介进行数据交换。
spt119
发表于 2011-7-26 12:18:27
本帖最后由 spt119 于 2011-7-26 12:47 编辑
回楼上:
之所以设计成XML,而不是文本形式的序列化数组,主要目的是兼顾AJAX在前端的操作。否则数据库的读取次数是降低了,但频繁的require和include操作,综合来看,也节省不了多少,或者会更多。(没有测试过)
XSLT直接输出成html页的方案,在输出后无须收回的设计方案上是可行的,但如果在html中内嵌统计的话(不是类似51la的统计),程序设计上将会过于复杂,所以没有采用这个方案。
cmsphp
发表于 2011-7-31 12:14:52
不错 值得借鉴