PHP函数执行成本表

时间:2009-07-24 12:11:43

标签: php execution-time micro-optimization

有一个参考表显示每个php函数的执行成本吗?

我知道时间执行是很多因素的基础,不可能确定一个独特的价值,但我正在寻找一个'意识形态'表。

例如,

is_dir() = cost 3
is_file() = cost 2

(以JUST为例;)

如果我不记得不好,对于C,每个操作都需要一个cpu周期表。

编辑:我读了你所有的评论,所以有任何表格可以满足我的需求。

无论如何,我知道

is_dir('/');//is faster than
is_dir('/a/very/long/path/to/check/');

但是,我有一些麻烦接受这种情况(如果我理解你的话,那是可能的);

$a = '/';
$b = '/a/very/long/path/to/check/';
is_dir($a);  //time execution 0.003
is_file($a); //time execution 0.005
//so suppose is_dir is faster than is_file
//(still example, function names and number are random ;)
is_dir($b);  //time execution 0.013
is_file($b); //time execution 0.009
//wow, now is faster is_file()....?

7 个答案:

答案 0 :(得分:4)

这样的图表没有帮助或准确。在你的例子中,函数的时间很大程度上取决于本地文件系统的细节,很快就会变得毫无意义。

衡量效果的唯一真正方法是构建代码,然后计算时间。是为了更快?也许在一种情况下一个会比另一个好,而在另一种情况下另一个会更快,这取决于代码内特定的各种因素。

使用分析器为您的代码计时,并获取一些对您的服务器环境中的项目准确的有意义的数据。

答案 1 :(得分:1)

我不知道这样一张桌子。

根据输入,功能的成本会有很大差异。

由array_unique()处理的1000项数组将比使用5项输入数组的相同函数花费更长的时间。

如果您对调整应用程序感兴趣,可以使用microtime来计算每个函数调用的执行时间。

它看起来像这样

$starttime = microtime();
is_dir('/var/foo');
$stoptime = microtime();
echo "is_dir cost: ".($stoptime-$startime);

答案 2 :(得分:1)

我认为这样的表无论如何都不可能存在。

首先,时间在很大程度上取决于输入。但对于各种功能来说,这不是一个问题。我们可以指出算法的复杂性:O(n ^ 2),O(n log(n))等等。我们有很好的数学设备来处理这样的事情。

更重要的是环境。你无法预测工作功能有多长,因为你不了解所有的环境。 NFS卷上的file_exists()不会像本地ext3卷那样快。您无法预测请求将转移到MySQL服务器的时间等等。

所以你应该做的 - 是衡量,衡量和衡量。仅取决于您自己的测量和您的环境。这是唯一的方法。

答案 3 :(得分:0)

对于PHP,你不能像“指令计数”那样。即使使用C,它也将取决于libc的实现。

答案 4 :(得分:0)

我认为没有功能成本表这样的东西,因为根据上下文,相同的功能可能会有非常不同的成本。

例如(但是以它为例!):

is_dir('/'); //will be very fast
is_dir('/symbolic_link/symbolic_link_on_a_remote_fs/'); //will be way slower

话虽如此,评估函数调用成本可能是一种非常好的优化方法。

使用分析器可以帮助您意识到代码中的某些特定函数调用比您希望的慢,并且重新思考/重写这些部分可能会加快速度。

答案 5 :(得分:0)

您最接近的可能是通过Vulcan Logic Dumper (author's webpage/project homepage link)进行的OpCode分析,以前称为Vulcan Logic Disassembler (PECL link)。 Sarah Golemon在her blog上有一些很好的信息。

答案 6 :(得分:0)

使用register_tick_function并声明(ticks = 1) 这些已经从PHP4开始,并提供低级指令计数。我想象这是通过计算在解释和执行PHP操作码期间生成的指令来实现的。

相关问题