Утро (4 часа): Аудит и Замеры
Первые четыре часа посвящаем не написанию кода, а сбору информации. Без метрик любые оптимизации слепы.
- Час 1: Мониторинг приложения. Подключите или проверьте APM-инструмент (например, Datadog, New Relic, OpenTelemetry). Если его нет, потратьте этот час на настройку базового сбора метрик: время ответа эндпоинтов, частота ошибок, потребление CPU/памяти. Сфокусируйтесь на самых медленных и самых популярных эндпоинтах. Выпишите ТОП-5 кандидатов на оптимизацию.
- Час 2: Аудит базы данных. Подключитесь к вашей СУБД (PostgreSQL, MySQL и т.д.) и выполните анализ медленных запросов. Используйте `pg_stat_statements` для PostgreSQL или `slow query log`. Найдите 3-5 самых тяжелых запросов по общему времени выполнения или количеству вызовов. Запустите `EXPLAIN ANALYZE` для каждого из них. Ищите full table scans, отсутствующие индексы, проблемные JOIN.
- Час 3: Анализ фронтенда. Используйте Lighthouse (встроен в Chrome DevTools) или WebPageTest для запуска аудита ключевых страниц. Обратите внимание на показатели Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), First Input Delay (FID). Проверьте размеры бандлов JavaScript, наличие неоптимизированных изображений, блокирующих рендеринг ресурсов.
- Час 4: Инфраструктура и зависимости. Проверьте версии критических компонентов стека (фреймворк, язык, база данных, веб-сервер). Устарели ли они на 2+ мажорные версии? Изучите файлы зависимостей (`package.json`, `requirements.txt`, `composer.json`). Есть ли неиспользуемые или дублирующиеся пакеты? Быстрый прогон инструментов типа `depcheck` может дать мгновенный результат.
Теперь, имея карту проблем, действуем точечно.
- Час 5: Оптимизация базы данных. Выберите один-два самых «жирных» запроса из утреннего списка. Добавьте недостающие индексы. Критерий: индекс должен покрывать условия WHERE и ORDER BY. Если запрос выбирает все поля таблицы, рассмотрите покрывающий индекс (covering index). Запустите запросы до и после — зафиксируйте выигрыш. Это может дать улучшение в разы за 30 минут работы.
- Час 6: Кэширование первого уровня. Внедрите кэширование ответов самых тяжелых и статичных эндпоинтов. Если у вас уже есть Redis или Memcached, добавьте кэш на 5-10 минут для GET-запросов, которые не требуют актуальности в реальном времени. Если кэша нет, настройте HTTP-кэширование через заголовки `Cache-Control` на фронтенде для статических ассетов.
- Час 7: Фронтенд-оптимизация. Возьмите самую большую найденную картинку и сожмите ее через Squoosh.app или ImageOptim. Конвертируйте PNG в WebP для современных браузеров. Удалите один неиспользуемый npm-пакет среднего размера. Этого часто достаточно, чтобы почувствовать разницу.
- Час 8: Обновление зависимостей и «гигиена». Обновите одну ключевую, но безопасную зависимость (например, минорную версию фреймворка, если процесс обкатан). Удалите все точно неиспользуемые зависимости из файлов проекта. Почистите конфигурационные файлы от закомментированного кода и старых параметров.
Последний блок — создание устойчивого результата.
- Час 9: Документирование и автоматизация. Задокументируйте все проведенные изменения. Напишите простой скрипт или добавьте команды в Makefile для повторения ключевых проверок (запуск аудита Lighthouse, анализ медленных запросов). Это превратит разовую акцию в повторяемый процесс.
- Час 10: Создание дорожной карты и итоговый замер. Соберите все проблемы, которые не успели решить за день (например, миграция на новую мажорную версию, рефакторинг монолитной функции), и приоритезируйте их в бэклог. В конце дня снова запустите замеры по ключевым метрикам из утра (время ответа главного эндпоинта, оценка Lighthouse). Зафиксируйте процент улучшения. Это ваша победа и аргумент для команды.
Комментарии (9)