Увеличение производительности: что дальше?
Для получения более быстрых приложений требуется усовершенствование многих аспектов: сервер, клиент, сеть, база данных, веб-сервер, статические ресурсы и т. д. В этой главе мы выделяем сценарии, где можно улучшить производительность, и как определить, что действительно медленно в вашем приложении.
Профилирование на сервере
Каждое приложение уникально, постоянное профилирование важно для понимания, где можно повысить производительность. Профилирование дает нам реальную картину того, что действительно медленно, а что нет. Профили могут варьироваться от одного запроса к другому, поэтому важно провести достаточное количество измерений, чтобы сделать выводы.
Профилирование с помощью XDebug
Xdebug предоставляет более простой способ профилирования приложений PHP, просто установите расширение и включите профилирование в php.ini:
xdebug.profiler_enable = On
Используя инструмент, такой как Webgrind, вы можете увидеть, какие функции/методы работают медленнее других:
Профилирование с помощью Xhprof
Xhprof — еще одно интересное расширение для профилирования приложений PHP. Добавьте следующую строку в начало файла загрузки:
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
Затем в конце файла сохраните данные профилирования:
$xhprof_data = xhprof_disable('/tmp');
$XHPROF_ROOT = "/var/www/xhprof/";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");
echo "http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";
Xhprof предоставляет встроенный HTML-просмотрщик для анализа данных профилирования:
Профилирование SQL-запросов
Большинство систем баз данных предоставляют инструменты для выявления медленных SQL-запросов. Выявление и исправление медленных запросов очень важно для повышения производительности на стороне сервера. В случае MySQL вы можете использовать журнал медленных запросов, чтобы узнать, какие SQL-запросы занимают больше времени, чем ожидалось:
log-slow-queries = /var/log/slow-queries.log long_query_time = 1.5
Профилирование на клиенте
Иногда нам может потребоваться улучшить загрузку статических элементов, таких как изображения, JavaScript и CSS, для повышения производительности. Следующие инструменты полезны для выявления общих узких мест на стороне клиента:
Профилирование с помощью Chrome/Firefox
Большинство современных браузеров имеют инструменты для профилирования времени загрузки страницы. В Chrome вы можете использовать веб-инспектор, чтобы узнать, сколько времени занимает загрузка различных ресурсов, необходимых для одной страницы:
Firebug предоставляет аналогичную функциональность:
Yahoo! YSlow
YSlow анализирует веб-страницы и предлагает способы улучшения их производительности на основе набора правил для высокопроизводительных веб-страниц
Профилирование с помощью Speed Tracer
Speed Tracer — инструмент, который поможет вам определить и исправить проблемы производительности в ваших веб-приложениях. Он визуализирует метрики, которые собираются из точек низкоуровневой инструментации внутри браузера, и анализирует их по мере выполнения вашего приложения. Speed Tracer доступен как расширение для Chrome и работает на всех платформах, где в настоящее время поддерживаются расширения (Windows и Linux).
Этот инструмент очень полезен, потому что он помогает получить реальное время, затраченное на отрисовку всей страницы, включая разбор HTML, оценку JavaScript и стили CSS.
Использование последней версии PHP
PHP с каждым днем становится быстрее, использование последней версии повышает производительность ваших приложений, а также Phalcon.
Использование кэша байткода PHP
APC, как и многие другие кэши байткода, помогают приложению уменьшить накладные расходы на чтение, токенизацию и разбор файлов PHP в каждом запросе. После установки расширения используйте следующие настройки для активации APC:
apc.enabled = On
PHP 5.5 включает встроенный кэш байткода под названием ZendOptimizer+, это расширение также доступно для 5.3 и 5.4.
Выполнение блокирующих задач в фоновом режиме
Обработка видео, отправка писем, сжатие файла или изображения и т. д. — это медленные задачи, которые необходимо обрабатывать в фоновых задачах. Существует множество инструментов, которые предоставляют системы очередей или обмена сообщениями, которые хорошо работают с PHP:
Google Page Speed
mod_pagespeed ускоряет ваш сайт и уменьшает время загрузки страницы. Этот модуль для Apache HTTP-сервера с открытым исходным кодом (также доступен для nginx как ngx_pagespeed) автоматически применяет лучшие методы повышения производительности веб-страниц к страницам и связанным ресурсам (CSS, JavaScript, изображения), не требуя изменений в существующем содержимом или рабочем процессе.
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/whats-next.html