PHP try catch finally性能测试

本文分析了PHP中try-catch结构在大量循环中执行异常处理的性能与直接输出异常的差异,指出try-catch在连续执行时效率较低,但单次执行影响小。建议在不影响性能的前提下,根据项目需求选择合适处理方式。
摘要由CSDN通过智能技术生成

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额外在多消耗一点性能

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值