Так как PHP-код будет работать отлично, даже если он пронизан предупреждениями и уведомлениями о неопределенных индексах и нестатических методах, называемых статическими, и т. Д., Вопрос в том, что если я потрачу время на удаление всех уведомлений и предупреждений из моего кода, работать значительно быстрее?
Я добавил статью, в которой автор сделал некоторые ориентиры; к сожалению, это на французском … но вот оно (может быть, вы поймете некоторые его части) : Ne faites pas d'erreur
И вот цифры, чтобы помочь людям, которые не читают французский:
error_reporting
и display_errors
: 5,162,76 мс display_errors
: 136,18 мс error_reporting
тоже: 117.79 мс Это означает, что, да, PHP-код работает быстрее без уведомлений / предупреждений / ошибок, даже если они не отображаются и не сообщаются.
Derick Rethans говорит то же самое в этой статье: Пять причин, по которым следует избегать оператора закрывания (@) (цитирование) :
Причина 3: медленно (часть 2)
Всякий раз, когда PHP генерирует сообщение об ошибке внутренне, он обрабатывается и отформатируется вплоть до полностью отформатированного сообщения, которое может выводиться прямо в браузер.
Только перед его отображением устанавливается параметрerror_reporting
. Это, однако, не связано исключительно с @ -оператором.
Сообщение об ошибке всегда полностью отформатировано до того, как будет провереноerror_reporting
, илиdisplay_errors
.
В зависимости от количества предупреждений, но обработка ошибок в 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: Еще одно замечание: я предполагаю, что больше времени тратится во время разговора с базами данных и аналогичными системами. и еще одно примечание: исправление уведомлений обычно делает код более надежным для будущих изменений, поэтому это хорошая идея, независимая от производительности.
В большинстве случаев я бы не назвал это «значительным» улучшением, но работающий код, который не генерирует никаких ошибок, естественно работает быстрее, чем код, который должен генерировать трассировку стека для каждой другой строки.
Ознакомьтесь с: http://www.noamdesign.com/Web-Design-Blog/15-tips-to-optimizing-your-php-code/ для получения дополнительной информации о небольших оптимизации, которые вы можете внести в свой код.
По моему собственному опыту, я обнаружил, что 95% оптимизации кода обычно касается того, как вы используете свою базу данных.