PHP try catch finally性能测试
2021年7月10日20:13:47
环境windows10 php8,没开jit 和opcache
<?php $start = microtime(true); for ($i = 0; $i < 50000; $i++) { echo ‘exception1‘; } echo ‘<br>‘ . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>"; /* * 9行,执行的时间为0.0081369876861572 seconds * 9行,执行的时间为0.015490055084229 seconds * 9行,执行的时间为0.016555070877075 seconds * 9行,执行的时间为0.01918888092041 seconds */ for ($i = 0; $i < 50000; $i++) { try { throw new Exception("exception2"); } catch (Exception $e) { echo $e->getMessage(); } } echo ‘<br>‘ . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>"; /* * 26行,执行的时间为0.044734001159668 seconds * 26行,执行的时间为0.051358938217163 seconds * 26行,执行的时间为0.04113507270813 seconds * 26行,执行的时间为0.049375057220459 seconds * 26行,执行的时间为0.038452863693237 seconds */ for ($i = 0; $i < 50000; $i++) { try { throw new Exception("exception2"); } catch (Exception $e) { // echo $e->getMessage(); } } echo ‘<br>‘ . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>"; /* * 44行,执行的时间为0.019383192062378 seconds * 44行,执行的时间为0.01354193687439 seconds * 44行,执行的时间为0.018233060836792 seconds * 44行,执行的时间为0.021934032440186 seconds * 44行,执行的时间为0.016831874847412 seconds */ for ($i = 0; $i < 50000; $i++) { try { echo ‘exception3‘; } catch (Exception $e) { echo $e->getMessage(); } } echo ‘<br>‘ . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>"; /* * 62行,执行的时间为0.023373126983643 seconds * 62行,执行的时间为0.014019012451172 seconds * 62行,执行的时间为0.019998073577881 seconds * 62行,执行的时间为0.012282848358154 seconds * 62行,执行的时间为0.021692991256714 seconds */ for ($i = 0; $i < 50000; $i++) { try { throw new Exception("exception2"); } catch (Exception $e) { echo $e->getMessage(); } finally { echo "exception5"; } } echo ‘<br>‘ . __LINE__ . "行,执行的时间为" . (microtime(true) - $start) . " seconds<br>"; /* * 82行,执行的时间为0.05253005027771 seconds * 82行,执行的时间为0.056346893310547 seconds * 82行,执行的时间为0.048244953155518 seconds * 82行,执行的时间为0.062366962432861 seconds * 82行,执行的时间为0.067360877990723 seconds */
每个都是单独运行,注释其他的
结论是:执行五万次,使用try catch的性能确实不如,直接输出,时间消耗是直接输出的大概2倍到2.5倍,但是注意是连续执行五万次,单次执行基本毫无性能损耗,如果你追求极致高性能,可以尝试自己在异常发生前自己返回
不使用try catch,但是普通项目直接使用是完全没问题的
但是finally 会比 try catch额外在多消耗一点性能
PHP try catch finally性能测试
[db:回答]