Подтвердить что ты не робот

Работает ли php быстрее без предупреждений?

Так как PHP-код будет работать нормально, даже если он пронизан предупреждениями и уведомлениями о undefined индексах и нестатических методах, называемых статическими, и т.д., вопрос в том, если я потрачу время, чтобы удалить ВСЕ уведомления и предупреждения из моего кода он будет работать значительно быстрее?

4b9b3361

Ответ 1

Я добавил статью, в которой автор сделал некоторые ориентиры; к сожалению, это на французском... но вот оно (может быть, вы поймете некоторые его части): Ne faites pas d'erreur

И вот цифры, чтобы помочь людям, которые не читают французский:

  • 10 тыс. уведомлений с включенными error_reporting и display_errors: 5,162,76 мс
  • то же, но с display_errors отключено: 136.18 мс
  • то же, но с error_reporting отключено: 117.79 мс
  • и, наконец, после исправления кода, чтобы он больше не выдавал никакого уведомления: 19.51 мс

Это означает, что, да, PHP-код работает быстрее без уведомлений/предупреждений/ошибок, даже если они не отображаются и не сообщаются.


Derick Rethans говорит то же самое в этой статье: Пять причин, по которым следует избегать оператора shut-op (@) (цитирование):

Причина 3: медленная (часть 2)

Всякий раз, когда PHP генерирует ошибку сообщение внутри, оно обрабатывается и отформатирован полностью до полного отформатированное сообщение, которое может быть выводится прямо в браузер.
Только перед отображением error_reporting. Однако это не связано с @-оператор исключительно.
Ошибка сообщение всегда полностью отформатировано до error_reporting проверяется - или display_errors, если на то пошло.

Ответ 2

В зависимости от количества предупреждений, но обработка ошибок в PHP, даже при скрытии сообщений об ошибках, относительно дорого.

Что вам нужно сделать, чтобы оценить эффект, это профилирование на уровне C: установите valgrind (если вы в Linux), а затем запустите

callgrind /path/to/bin/php /path/to/script.php

генерирует файл с именем callgrind.12345 или так, загрузите этот файл в приложение, например kcachegrind и найдите php_error_docref0 или php_error_cb, чтобы узнать, сколько времени было потрачено на обработчик ошибок.

Пожалуйста, обращайтесь к документам cachegrind и valgrind, когда делаете это, и помните, что есть много зависящих от системы переменных.

EDIT: Еще одно замечание: я предполагаю, что путь больше времени тратится во время разговора с базами данных и аналогичными системами. и еще одно примечание: исправление уведомлений обычно делает код более надежным для будущих изменений, поэтому хорошая идея не зависит от производительности.

Ответ 3

Я бы не назвал это "существенным" улучшением для большинства случаев, но запуск кода, который не генерирует ошибок любого типа, естественно работает быстрее, чем код, который должен генерировать трассировку стека для каждой другой строки.

Отъезд: http://www.noamdesign.com/Web-Design-Blog/15-tips-to-optimizing-your-php-code/ для получения дополнительной информации о небольших оптимизации, которые вы можете внести в свой код.

По моему собственному опыту, я обнаружил, что 95% оптимизации кода обычно связано с тем, как вы используете свою базу данных.