Производительность PHP

Что я могу сделать для повышения производительности / скорости моих PHP-скриптов без установки программного обеспечения на моих серверах?

Профиль. Профиль. Профиль. Я не уверен, есть ли что-то там для PHP, но должно быть просто написать небольшой инструмент для вставки профилирующей информации в ваш код. Вам нужно будет профилировать время работы и время запросов SQL.

Итак, где у вас есть функция:

function foo($stuff) { ... return ...; } 

Я бы изменил его на:

 function foo($stuff) { trace_push_fn('foo'); ... trace_pop_fn('foo'); return ...; } 

(Это один из тех случаев, когда множественные возвращения в функции становятся препятствием.)

И SQL:

 function bar($stuff) { trace_push_fn('bar'); $query = ...; trace_push_sql($query); mysql_query($query); trace_pop_sql($query); trace_pop_fn('bar'); return ...; } 

В итоге вы можете создать полную трассу выполнения программы и использовать всевозможные методы для определения ваших узких мест.

Один разумный метод, который можно легко снять с полки, – это кеширование. Огромное количество времени имеет тенденцию к созданию ресурсов для клиентов, которые являются общими для запросов (и даже для клиентов); устранение этой работы во время работы может привести к резкому увеличению скорости. Вы можете сбросить сгенерированный ресурс (или фрагмент ресурса) в файл за пределами веб-дерева, а затем прочитать его при необходимости. Очевидно, что потребуется некоторое профилирование, чтобы гарантировать, что это на самом деле быстрее, чем регенерация. Регулярное принуждение веб-сервера к диску может быть вредным, поэтому ресурс действительно нуждается в интенсивном повторном использовании.

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

Ни один из них не ограничивается PHP, хотя некоторые из подходов / функций PHP «magicy» могут перекрыть защиту от размышлений об этих проблемах. Например, недавно я обновил скрипт, который использовал array_search для использования двоичного поиска по отсортированному массиву и получил ожидаемое ускорение ускорения.

Подумайте о том, как использовать профайлер XDebug: он помогает проверять, насколько определенная функция выполняется против того, что вы ожидали.

Я пытаюсь уменьшить инструкции, улучшая читаемость кода, заменяя логику на поиск массива, когда это необходимо. Это то, что написал Джефф Этвуд в [The Best Code No Code At All] [1].

  • Кроме того, избегайте циклов внутри другого цикла и вложенных операторов if / else.
  • Короткие функции. Иногда много кода не нужно выполнять, когда значение результата уже известно.
  • Ненужное тестирование:

    if (count ($ array) === 0) return;

    также может быть записана как:

    if (! $ array) return;

    Другой вызов функции отменен!

    [1]: http://www.codinghorror.com/blog/archives/000878.html «Лучший код вообще не содержит кода»

Вы можете оптимизировать код с помощью двух основных вещей:

Оптимизация связанной с PHP библиотеки и сервера

Перейдите по ссылке https://www.digitalocean.com/community/articles/how-to-optimize-apache-web-server-performance или

Вы можете использовать инструмент профилирования, например xhprof, для просмотра того, какая часть вашего кода может быть оптимизирована, и вот ссылка: http://michaelsanford.com/compiling-xhprof-for-php-5-4/

Оптимизация кода с помощью анализатора кода и анализатора кода

Чтобы использовать этот плагин, вам необходимо установить Netbeans. Вот шаги, которые вам нужно выполнить:

1) Откройте NetBeans, затем выберите опцию из меню «Инструменты»> «Плагин». Затем найдите имя подключаемого модуля «phpcsmd» на вкладке доступного плагина и установите его там.

2) Теперь откройте терминал и станьте суперпользователем, набрав команду «sudo su».

3) Установите библиотеку PEAR (если она не установлена) в вашу систему, выполнив следующие команды в вашем терминале

 a) wget http://pear.php.net/go-pear.phar b) php go-pear.phar 

Поскольку это необходимо для установки дополнительных аддонов.

4) Затем запустите команду

 "pear config-set auto_discover 1" 

Это будет использоваться для автоматического определения пути «true» для необходимых плагинов. Поэтому они автоматически устанавливаются в нужное место.

5) Затем запустите команду ниже, чтобы установить сниффер кода PHP.

 "pear install --alldeps pear/PHP_CodeSniffer" 

6) Теперь, чтобы установить детектор ошибок PHP, выполнив следующую команду

 "pear install --alldeps phpmd/PHP_PMD" 

Если при установке этого модуля вы получите ошибку, например, «недопустимое имя пакета / пакетный файл» phpmd / PHP_PMD ». Вам нужно использовать эту команду «pear channel-discover pear.phpmd.org», чтобы избавиться от этой ошибки. После этой команды вы можете снова запустить приведенную выше команду, чтобы установить детектор Mess.

7) Теперь, чтобы установить PHP Depend, выполнив следующую команду

 "pear install --alldeps pdepend/PHP_Depend" 

8) Теперь установите PHP Copy Paste Detector, выполнив следующую команду

 "pear install --alldeps phpunit/phpcpd" 

9) Затем запустите команду

 "pear config-set auto_discover 0" 

Это будет использоваться для установки пути автоматического обнаружения «false».

10) Затем откройте сетевые бобы и следуйте по пути Инструменты> Параметры> PHP> PHPCSMD

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

Где ваши узкие места? Например, ваш процессор сценариев / базы данных / памяти интенсивный?

Проводили ли вы какие-либо профилирования?

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

Я всегда немного настороженно пытаюсь быть слишком умным с точки зрения оптимизации кода, если он жертвует коварством. Если вам нужно сделать код неясным, чтобы сделать его быстрым, не было бы дешевле обновить жесткое белье, а не тратить время на то, чтобы настроить код? В конце концов, циклы процессоров дешевле циклов программистов.

Те, о которых я могу думать …

  • Инварианты цикла всегда хорошие, чтобы смотреть.

  • Напишите E_STRICT и E_NOTICE-совместимый код, особенно если вы регистрируете ошибки.

  • Избегайте оператора @.

  • Абсолютные пути для требуемых и включенных.

  • Используйте strpos, str_replace и т. Д. Вместо регулярных выражений, когда это возможно.

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

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

Это, конечно, не требует никакого нового аппаратного или специального программного обеспечения, а просто критикует существующий код.

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

Я отвечаю за большую систему отчетности, и мы отслеживаем такие медленные отчеты. Я запускаю уникальный ключ в db, когда начинается отчет, а затем, когда он заканчивается, я могу определить, сколько времени прошло. Я использую базу данных, потому что таким образом я могу обнаружить, когда время ожидания страниц (что бывает намного больше, чем хотелось бы)

Следуйте некоторым другим рекомендациям сначала, как профилирование и принятие правильных решений о распределении ресурсов, например кеширование.

Кроме того, учитывайте эффективность внешних ресурсов, таких как ваша база данных. В MySQL вы можете, например, проверить журнал медленных запросов . Кроме того, убедитесь, что вы не создали свою базу данных, забудьте об этом. Оптимизация ваших запросов ( опять-таки для MySQL ) по отношению к реальным данным может оплачивать большие.

Расмус Лердорф дал несколько хороших советов в своей недавней презентации « Simple is Hard » в FrOSCon'08. Если вы используете кеш-байт-код (и вы действительно должны его использовать), включите пропуски в пути много, так что оптимизируйте require / require_once.

Вы можете использовать инструмент профилирования, например xhprof, для просмотра того, какая часть вашего кода может быть оптимизирована!