Как улучшить производительность проекта за три шага Шаромов Денис руководитель отдела техподдержки
Основные положения Проблема должна быть обозначена (сайт падает, долго открывается страница и т.д.) Цель – измерима (предотвратить падения сайта, уменьшить время работы страницы с 1 сек. до 0.1 сек., разгрузить диск со 100% до 50%) Не должно быть оптимизации ради процесса (нельзя просто "что-то" сделать и "что-то" ускорить)
Перед началом работы Устранить явные ошибки конфигурации Монитор производительности: Настройки PHP Монитор производительности: Сервер БД
Шаг 0: отладка шаблона Создать «нулевую страницу» и убедиться, что в шаблоне сайта все компоненты закешированы, нет лишних запросов и долгих операций
Методика работы Шаг 1 находим раздел или страницу, которые создают проблему Шаг 2 выясняем, что является проблемой: компонент, sql, код Шаг 3 устраняем проблему
Шаг первый: Где? Если проблема наблюдается стабильно Включаем режим отладки
Шаг первый: Где? Если проблема наблюдается стабильно Смотрим статистику по нагрузке страниц
Шаг первый: Где? Если нет возможности включить монитор
Шаг первый: Где? Если нет возможности включить монитор Фиксировать время работы страницы в текстовый файл Производительность сайта в картинках Производительность сайта в картинках Включить регистрацию времени исполнения страниц в лог Apache (параметр %T) Подключить модуль xhprof для php Отладка сложных веб-приложений Отладка сложных веб-приложений
Шаг второй: Что? Ответом будет компонент, SQL запрос или фрагмент кода
Шаг второй: Что? Переходим в режим отладки
Шаг второй: Что? Анализируем время исполнения страницы
Шаг третий: Что делать? Проверить, включен ли кеш Оптимизировать таблицы базы данных Пробовать перевести таблицы в InnoDB и наоборот через монитор производительности Создать индексы через монитор производительности Проверить компонент: считать число элементов, учитывать права доступа, дату активности Перенести свойства инфоблока в отдельные таблицы и наоборот
Шаг третий: Что делать? Использовать в фильтрах ID свойств вместо символьного кода Сократить число фильтруемых свойств Избегать выборки большого числа данных с сортировкой Все долгие операции (импорт/экспорт, работа с внешними сервисами по http) выносить на агенты и выполнять на cron EXPLAIN и профайлер MySQL Xdebug (трассировка и профайлинг), xhprof
Алгоритм работы Шаг 1 Шаг 2 Шаг 3 Цель достигнута? нет конец да начало
Спасибо за внимание! Вопросы? Шаромов Денис Skype: denis_call