在日常的搬砖中,不免会因为忘记定义变量,或者忘记定义变量,再或者数值下标未定义等情况产生的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)
<?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の大狮子!