PHP -- 关于Notice级别错误对系统运行消耗时间的研究

在日常的搬砖中,不免会因为忘记定义变量,或者忘记定义变量,再或者数值下标未定义等情况产生的Notice级别的报错,或许大家对这些警告性的报错并不在意,其实,这些问题还是会影响系统的整体性能。

在此简单的做三个小实验,并进行对比分析:

1、关闭err,未定义变量(让Notice正常报错)

<?php
$starttime = microtime(true);
for($i=0;$i<1000;$i++){
    $data = $datanum;
    echo $data;
}
$endtime = microtime(true);
echo '循环1000次,运行消耗时间:'.($endtime-$starttime).'秒。';
echo '消耗内存: '.memory_get_usage().'byte。';
?>

做五次实验得出如下结果:

循环1000次,运行消耗时间:2.7713568210602秒。消耗内存: 364552byte。
循环1000次,运行消耗时间:2.8222291469574秒。消耗内存: 364552byte。
循环1000次,运行消耗时间:2.5626180171967秒。消耗内存: 364552byte。
循环1000次,运行消耗时间:2.6679899692535秒。消耗内存: 364552byte。
循环1000次,运行消耗时间:2.9386341571808秒。消耗内存: 364552byte。

平均时间:≈2.75s

2、开启err,未定义变量(使用E_ALL屏蔽Notice的错误)

<?php
error_reporting(E_ALL & ~E_NOTICE);
$starttime = microtime(true);
for($i=0;$i<1000;$i++){
    $data = $datanum;
    echo $data;
}
$endtime = microtime(true);
echo '循环1000次,运行消耗时间:'.($endtime-$starttime).'秒。';
echo '消耗内存: '.memory_get_usage().'byte。';
?>

做五次实验得出如下结果:

循环1000次,运行消耗时间:0.0056569576263428秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0047118663787842秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0033409595489502秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0031411647796631秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0034239292144775秒。消耗内存: 364608byte。

平均时间:≈0.00405s

3、开启err,定义变量(定义变量并且开始E_ALL)

扫描二维码关注公众号,回复: 3137902 查看本文章
<?php
error_reporting(E_ALL & ~E_NOTICE);
$datanum = '1';
$starttime = microtime(true);
for($i=0;$i<1000;$i++){
    $data = $datanum;
    echo $data;
}
$endtime = microtime(true);
echo '循环1000次,运行消耗时间:'.($endtime-$starttime).'秒。';
echo '消耗内存: '.memory_get_usage().'byte。';
?>

做五次实验得出如下结果:

循环1000次,运行消耗时间:0.0011057853698734秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0014739036560059秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0014801025390625秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0012311935424805秒。消耗内存: 364608byte。
循环1000次,运行消耗时间:0.0014669895172119秒。消耗内存: 364608byte。

平均时间:≈0.00135s

消耗时间比值:

2.75/0.00405 = 679
2.75/0.00135 = 2037

0.00405/0.00135 = 3

       由数据可以看出关闭err,未定义变量是开启err,未定义变量的679倍,是开启err,定义变量的2037倍,而即使开启了err,不定义变量的话,消耗的时间也会是开启err,定义变量的三倍。

       由上面的对比试验可以清晰的看出,关闭掉PHP错误输出并不会关闭PHP内核对错误的处理,代码中如果有大量的Notice级别的错误,还是会降低php程序的性能。所以在开发的时候还是要将错误级别开至E_ALL,谨慎的处理掉每处不合理的代码,这样既可以提高了代码的严谨性,也提高了代码的运行性能。

       关闭err,未定义变量稍节省内存的开销,但差别不大。

欢迎补充!

QE大狮子!

猜你喜欢

转载自blog.csdn.net/hongyuancao/article/details/80518293