到底什么导致了执行效率上的差异(winxp+apache2.0+php521)
作者:admin 发布时间:May 21, 2007 分类:默认
发现一个比较奇怪的问题,到底什么导致了执行效率上的差异。
首先有一个数组 Myarray;
接下来我们把通过 serialize 把它弄成字符串 MYserialize;
1.一个存为是纯 serialize 化的字符串的文本,内容为:“MYserialize”假定文件为1.php。
2.另一个存成php文件内容为 :“ ”假定文件为2.php。
接下来我们需要用到这个数组:
方法a.我们使用1.php文件 获取方式为 :
$myarray =unserialize(file_get_contents('1.php'));
方法b.采用2.php文件方式获取:
include('2.php');
上面两种方式感觉上就是include 和 file_get_contents 的差异。
为了进一步测试我们接着把 Myarray 直接存成 文件,设置为3.php 内容就是 “”
接下来使用的时候直接 include('3.php'); 方法c。
这样3者对比就会发现 问题又好像出在 unserialize 的执行效率上。
现在大家可以想像一下 a,b,c 3种方式到底执行效率是怎么样的。发现一个比较奇怪的问题,到底什么导致了执行效率上的差异。
首先有一个数组 Myarray;
接下来我们把通过 serialize 把它弄成字符串 MYserialize;
1.一个存为是纯 serialize 化的字符串的文本,内容为:“MYserialize”假定文件为1.php。
2.另一个存成php文件内容为 :“ ”假定文件为2.php。
接下来我们需要用到这个数组:
方法a.我们使用1.php文件 获取方式为 :
$myarray =unserialize(file_get_contents('1.php'));
方法b.采用2.php文件方式获取:
include('2.php');
上面两种方式感觉上就是include 和 file_get_contents 的差异。
为了进一步测试我们接着把 Myarray 直接存成 文件,设置为3.php 内容就是 “'...' ......); ?>”
接下来使用的时候直接 include('3.php'); 方法c。
这样3者对比就会发现 问题又好像出在 unserialize 的执行效率上。
现在大家可以想像一下 a,b,c 3种方式到底执行效率是怎么样的。
下面开始公布测试结果,首先还要说明一下平台(winxp+apache2.0+php521) php采用apache module方式运行。
小数组情况下。
c最慢 b次之 a最快
随着数组数据量的增大abc都开始合理性的变慢,当数组大到一定程度的时候 b 开始慢的一点离谱 ,可以想像的是:如果问题出在include上那很显然 c 也会如b般慢 ,而如果问
题在 unserialize 的话那a 也会呈这种慢的趋势。
但事实上除了 b 出现离谱的巨慢外, a,c的效率一直都在情理之中,值得一说的是a始终保持着最快的速度。
所以问题的结果有些奇怪,include+unserialize 导致变慢?
显然这个结果是不能让人信服的。
这次改用(winxp+apache224+php522) php采用fastcgi方式运行
这次测试的结果比较合理了,无论数据大小3者差异都并不大。 c相对来说快一些,这也比较合理毕竟少了一次unserialize操作。