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)

<?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大狮子!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值