005 Производительность
Повышение Производительности.
Для получения более быстрых приложений требуется уточнить многие аспекты: сервер, клиент, сеть, базу данных, веб-сервер, статические источники и т. д. В этой главе мы выделяем сценарии, в которых можно повысить производительность и определить, что действительно медленно в приложении.
Профиль на сервере.
Каждое приложение отличается, постоянное профилирование важно, чтобы понять, где производительность может быть увеличена. Профилирование дает нам реальную картину того, что действительно медленно, а что нет. Профили могут варьироваться от запроса к запросу, поэтому важно сделать достаточно измерений, чтобы сделать выводы.
Профилирование с XDebug
XDebug обеспечивает более простой способ профилирования PHP-приложений, просто установите расширение и включите профилирование в php.ini:
xdebug.profiler_enable = On
Используя такой инструмент, как Webgrind, вы можете увидеть, какие функции/методы медленнее других:
Профилирование с Xhprof
Xhprof еще одно интересное расширение для профилирования PHP-приложений. Добавьте следующую строку в начало файла начальной загрузки:
<?php xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
Затем в конце файла сохраните профилированные данные:
<?php $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 доступен в виде расширения Chrome и работает на всех платформах, где в настоящее время поддерживаются расширения (Windows и Linux).
Этот инструмент очень полезен, потому что он поможет вам получить реальное время, используемое для отображения всей страницы, включая анализ HTML, оценку Javascript и CSS-стиль.
Используйте последнюю версию PHP.
PHP работает быстрее с каждым днем, использование последней версии повышает производительность ваших приложений, а также Phalcon.
Используйте кэш байт-кода PHP.
APC как и многие другие байт-кэши, они помогают приложению сократить издержки чтения, разметки и разбора PHP-файлов в каждом запросе. После установки расширения используйте следующую настройку для включения APC:
apc.enabled = On
Сделайте блокирующую работу в фоновом режиме.
Процесс видео, отправляйте электронные письма, сжать файл или изображение и т. д.,- медленные задачи, которые должны обрабатываться в фоновых заданиях. Существует множество инструментов, которые обеспечивают очереди или системы обмена сообщениями, которые хорошо работают с PHP:
Скорость Страницы Google.
mod_pagespeed ускоряет работу сайта и сокращает время загрузки страниц. Этот модуль HTTP сервера Apache с открытым исходным кодом (также доступен для nginx как ngx_pagespeed) автоматически применяет рекомендации по производительности веб-страниц и связанных ресурсов (CSS, JavaScript, изображения) без необходимости изменения существующего содержимого или рабочего процесса.