Замедляют ли «Уведомление» и «Предупреждения» PHP-скрипт без сообщений об ошибках?

  • Автор темы echo_0
  • 31
  • Обновлено
  • 13, May 2024
  • #1
Замедляют ли «Уведомление» и «Предупреждения» PHP-скрипт без сообщений об ошибках?

Однажды я проводил такой тест, и разница во времени выполнения была незначительной.

Хотя мне все еще любопытно.

Если для error_reporting установлено нулевое значение и генерируются ошибки «замечания», имеет ли это большое значение?

Например, этот код будет генерировать ошибки NOTICE:
 
<?php

$a=array( 'red'=>255, 'green'=>200, 'blue'=>100 );
echo $a[red].'<br />'; //Notice error
echo $a['green'].'<br />'; //notice error
echo $a["blue"].'<br />'; //no error
?>
Код (разметка):

echo_0


Рег
01 Jan, 2011

Тем
1

Постов
1

Баллов
11
  • 19, May 2024
  • #2
Я бы сказал да. Уведомления и ошибки указывают на код, который работает не совсем так, как ожидалось. Я всегда стараюсь, чтобы error_log не присутствовал. Если появляется файл error_log, я всегда стараюсь исправить проблемы как можно скорее.
 

Евгений Мейран


Рег
10 Jan, 2013

Тем
0

Постов
3

Баллов
3
  • 07, Jun 2024
  • #3
Только что запустил это как в Chrome, так и в Firefox (с закомментированной строкой error_reporting - ошибка включена по умолчанию), ни один из них не завис. Не могу протестировать в Edge, так как удалил его.
 

StrongASB


Рег
11 May, 2014

Тем
0

Постов
3

Баллов
3
  • 08, Jun 2024
  • #4
Попробуйте то же самое, используя microtime(true) вместо time().
 
<?php
error_reporting(0);
$s=microtime(true);
$a=array( 'red'=>255, 'green'=>126, 'blue'=>50 );
for($x=0; $x<5000; ++$x){
echo $a[red]."\n";
}
$e=microtime(true);
echo '<h3>'. ($e-$s).'</h3>';
Код (разметка):
 

Елена Половина


Рег
05 Feb, 2012

Тем
0

Постов
3

Баллов
3
  • 09, Jun 2024
  • #5
Провёл этот тест. Правильный код, ошибок не возникает.
 
<?php
error_reporting(0);
$s=time();
$a=array( 'red'=>255, 'green'=>126, 'blue'=>50 );
for($x=0; $x<5000; ++$x){
echo $a[red]."\n";
}
$e=time();
echo '<h3>'. ($e-$s).'</h3>';
?>
Код (разметка): Затраченное время составляет «0» секунд.

($е-$ы) Теперь с error_reporting равным нулю и кодом, который будет генерировать уведомление об ошибке.
  <?php //error_reporting(0); $s=time(); $a=array( 'red'=>255, 'green'=>126, 'blue'=>50 ); for($x=0; $x<5000; ++$x){ echo $a["red"]."\n"; } $e=time(); echo '<h3>'. ($e-$s).'</h3>'; ?> 


Код (разметка): затраченное время снова равно «0» секунд.

Если я прокомментирую строку error_reporting во втором коде, то при каждом обращении к $a[red] будет генерироваться уведомление об ошибке.

Даже тогда время выполнения составляло всего «1» секунду...

И из-за всех этих строк УВЕДОМЛЕНИЯ в браузере 5000 раз зависали и Firefox, и Chrome.

Работал только IE. Но если для error_reporting установлено значение 0, в обоих случаях это было «0» секунд, и в браузере не возникало никаких ошибок NOTICE.
 

NetNamed


Рег
25 Sep, 2014

Тем
1

Постов
2

Баллов
12
  • 10, Jun 2024
  • #6
Что ж, я получаю 5000 строк уведомлений об ошибках в браузере, и оба браузера зависают. В любом случае, это не проблема. Вопрос в том, занимает ли обработка PHP больше времени или нет. В обоих кодах не было никакой разницы, если error_reporting был установлен в ноль.
 

johnheslon


Рег
19 Dec, 2015

Тем
0

Постов
1

Баллов
1
  • 11, Jun 2024
  • #7
1) из-за детализации таймера (как часто он обновляется) зацикливание указанного количества циклов НЕ является значимым способом сравнительного тестирования в PHP.

Подождите, пока таймер перевернется, а затем зациклите определенное количество итераций подсчета времени.

Хорошее практическое правило: каждый раз, когда вы видите, что в тесте используется «прошедшее время», а разница во времени измеряется менее десяти секунд, это неточная чушь. 2) Почему $a['green'] допустил ошибку в вашем первоначальном сообщении? О, это не так.

посмотри на это. 3) Эхо означает, что кэширование, работа в сети, буферизация памяти и целый ряд других факторов могут мешать, поэтому, возможно, вместо этого сделайте простое добавление? Итак, давайте проведем ЗНАЧИМОЕ измерение вашего второго примера.
 

<?php

// error_reporting(0);

$test = [ 'red' => 255 ];

$count = 0;

$temp = microtime(true);

do { $end = microtime(true); } while ($end == $temp);

$end += 1; // 1 full second minimum

do {

$temp += $test['red'];

$count++;

} while (microtime(true) < $end);

echo '<br><br>Iterations (higher is better) :', $count, '<br>';

Код (разметка): На моем i7 4770k у меня получается более 10 проходов: (помните, чем выше, тем лучше)

Действительно при включенной отчетности: от 15 698 688 до 15 702 565 итераций.

Действительно с отключенной отчетностью: от 15 078 511 до 15 124 391 итерации.

Недействительно при включенной отчетности: от 13 320 до 13 338 итераций (да, ошибки вывода)

Недействительно при отключенной отчетности: от 1 786 715 до 1 892 118.

Рисует довольно ясную картину, не так ли? Практически действительный код с включенной или отключенной отчетностью работает в восемь или девять раз быстрее, чем недействительный с отключенной отчетностью, более чем в 1000 раз быстрее с включенной отчетностью.

и это без вычитания из уравнения накладных расходов на проверку цикла и временного кода. Конечно, причина, по которой он в 1000 раз быстрее, заключается в том, что задействован вывод.

поэтому я удалил из тестирования накладные расходы на вывод, где это возможно. Также не пытайтесь запускать все проверки в одном файле: кеширование, буферизация результатов и использование памяти могут исказить результаты в пользу того порядка, в котором вы их запускаете.
 

skaen


Рег
04 Feb, 2016

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно