非常聪明的工作人员告诉我,尝试不抛出的捕获会影响拥有数百万用户的网站的性能。基于发布的单元测试表明性能相同,我想知道这是否与操作系统级别和/或Web服务器特定情况有关。例如,Web服务器的异步工作实现发生在子进程而不是线程上。
有人知道吗?
我希望看到的是php profiler的输出,显示实际使用的cpu时间。
jmucchiello对Performance of try-catch in php的评论很有意思,但不测量使用的cpu时间。
谢谢, 大卫
答案 0 :(得分:12)
我进行了一项非常小而且不科学的测试,发现在一个永远不会被调用的catch或者在try catch语句之外使用它之间几乎没有区别。我通过我的探查器分别运行了这两个脚本中的每一个5次,并平均了总时间。
<?php
foreach(range(1,200000) as $i) {
try {
if ($i % 5 == 0 && $i % 3 == 0) echo "fizzbuzz";
elseif ($i % 5 == 0) echo "fizz";
elseif ($i % 3 == 0) echo "buzz";
else echo $i;
} catch (Exception $e) {
echo sin($i) * cos($i * pi());
}
}
?>
<?php
foreach(range(1,200000) as $i) {
if ($i % 5 == 0 && $i % 3 == 0) echo "fizzbuzz";
elseif ($i % 5 == 0) echo "fizz";
elseif ($i % 3 == 0) echo "buzz";
else echo $i;
}
?>