我是个有代码洁癖的人,写出来的程序上线后不想见到任何错误 ,而且我也认为错误信息虽然被屏蔽了,但是应该会影响性能的,曾想去验证我这个想法,但还没去验证过,今天正好看到一文章是说这个情况,验证了我的观点,于是摘录如下:
很多人开发php的时候喜欢关掉一部分的错误提示,尤其是Notice级别的提示,这样做可以省去一些严格判断的代码。而平时开发喜欢开着E_ALL级别的我今天在接手同事的项目时,看着满屏幕Notice错误时突然想到了1个问题:
在关掉错误提示时,那么程序代码中大量的notice级别错误是否会造成PHP性能下降,从而使关闭错误输出成为一个掩耳盗铃的做法呢?
下面我来用性能测试来证明这个推论:
测试1:
在关闭错误显示的情况下,测试未初始化变量和已初始化变量在10000000次循环中的性能
变量已初始化的循环代码如下:
PHP代码
- $start = getmicrotime();
- error_reporting(E_ALL | E_STRICT);
- ini_set('display_errors', false);
- ini_set('log_errors', false);
- $var=1;
- for ($i=0; $i < 10000000; $i++) {
- $foo=$var;
- }
- $end = getmicrotime();
- echo $end – $start;
- function getmicrotime(){
- list($usec,$sec)=explode(" ",microtime());
- return ((float)$usec+(float)$sec);
- }
变量未初始化的循环代码如下:
PHP代码
- $start = getmicrotime();
- error_reporting(E_ALL | E_STRICT);
- ini_set('display_errors', false);
- ini_set('log_errors', false);
- for ($i=0; $i < 10000000; $i++) {
- $foo=$var;
- }
- $end = getmicrotime();
- echo $end – $start;
- function getmicrotime(){
- list($usec,$sec)=explode(" ",microtime());
- return ((float)$usec+(float)$sec);
- }
测试成绩:
初始化:平均 5.28 秒
未初始化:平均 17.2 秒
性能差距:3.25倍
测试2:
在关闭错误显示的情况下,测试数组索引使用引号和非引号引用在10000000次循环中的性能
数组有引号索引代码如下:
PHP代码
- $start = getmicrotime();
- error_reporting(E_ALL | E_STRICT);
- ini_set('display_errors', false);
- ini_set('log_errors', false);
- $array=array('foo'=>'baa');
- for ($i=0; $i < 10000000; $i++) {
- $foo=$array['foo'];
- }
- $end = getmicrotime();
- echo $end – $start;
- function getmicrotime(){
- list($usec,$sec)=explode(" ",microtime());
- return ((float)$usec+(float)$sec);
- }
数组无引号索引代码如下:
PHP代码
- $start = getmicrotime();
- error_reporting(E_ALL | E_STRICT);
- ini_set('display_errors', false);
- ini_set('log_errors', false);
- $array=array('foo'=>'baa');
- for ($i=0; $i < 10000000; $i++) {
- $foo=$array[foo];
- }
- $end = getmicrot