0

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

我知道时间执行受许多因素的限制,不可能确定一个独特的价值,但我正在寻找一个“意识形态”表。

例如,

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

(以它为例;)

如果我不记得不好,对于 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()....?
4

7 回答 7

4

这样的图表不会有帮助或不准确。在您的示例中,该功能的时间安排在很大程度上取决于本地文件系统的细节,并且很快就会变得毫无意义。

衡量性能的唯一真正方法是构建代码,然后对其计时。是不是比一会儿快?也许在一种情况下一个会比另一个更好,而在另一种情况下另一个会更快,这取决于特定于其中代码的各种因素。

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

于 2009-07-24T12:20:47.047 回答
1

我不知道有这样的表。

函数的成本会因输入而有很大差异。

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

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

它看起来像这样

$starttime = microtime();
is_dir('/var/foo');
$stoptime = microtime();
echo "is_dir cost: ".($stoptime-$startime);
于 2009-07-24T12:17:48.310 回答
1

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

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

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

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

于 2009-07-24T12:33:08.970 回答
0

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

于 2009-07-24T12:14:06.983 回答
0

我不认为有函数成本表之类的东西,因为根据上下文的不同,相同的函数可能会有非常不同的成本。

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

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

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

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

于 2009-07-24T12:32:20.437 回答
0

您将获得的最接近的可能是通过Vulcan Logic Dumper(作者的网页/项目主页链接)进行的 OpCode 分析,以前称为Vulcan Logic Disassembler(PECL 链接)Sarah Golemon 在她的博客上有一些关于这些东西的好信息。

于 2010-07-07T18:20:10.000 回答
0

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

于 2012-01-04T16:39:08.997 回答