Узнайте, как внедрить Frontend Lighthouse CI для непрерывного мониторинга производительности, обеспечивая оптимальную скорость и пользовательский опыт для ваших веб-приложений.
Frontend Lighthouse CI: непрерывный мониторинг производительности для веб-приложений
В современном быстро меняющемся цифровом мире производительность веб-сайта имеет первостепенное значение. Медленно загружающийся или плохо оптимизированный сайт может привести к разочарованию пользователей, снижению вовлеченности и, в конечном итоге, к негативному влиянию на ваш бизнес. Именно здесь на помощь приходит Lighthouse CI. Это руководство проведет вас через процесс внедрения Lighthouse CI для непрерывного мониторинга производительности, что позволит вам проактивно выявлять и устранять узкие места в производительности до того, как они затронут ваших пользователей.
Что такое Lighthouse CI?
Lighthouse CI — это автоматизированный инструмент для тестирования производительности с открытым исходным кодом, который легко интегрируется в ваш конвейер непрерывной интеграции и непрерывной доставки (CI/CD). Он использует инструмент аудита Google Lighthouse для предоставления действенных сведений о производительности вашего сайта, его доступности, SEO и лучших практиках. Включив Lighthouse CI в свой рабочий процесс, вы сможете непрерывно отслеживать производительность вашего сайта, отслеживать регрессии и гарантировать, что каждое изменение кода способствует улучшению пользовательского опыта. Lighthouse CI не привязан к одному конкретному облачному провайдеру и может использоваться с различными настройками. Например, он может работать внутри Docker-контейнера на таких сервисах, как Github Actions, Jenkins, CircleCI и многих других.
Зачем использовать Lighthouse CI?
Внедрение Lighthouse CI предлагает множество преимуществ:
- Раннее обнаружение регрессий производительности: выявляйте проблемы с производительностью, вызванные новыми изменениями в коде, до того, как они попадут в продакшен.
- Улучшение производительности сайта: получайте действенные рекомендации по оптимизации вашего сайта для скорости, доступности и SEO.
- Улучшенный пользовательский опыт: предоставляйте более быстрый и удобный сайт, который удерживает посетителей.
- Снижение показателя отказов: оптимизируйте время загрузки, чтобы уменьшить разочарование пользователей и предотвратить их уход с вашего сайта.
- Повышение коэффициента конверсии: более быстрый сайт обычно приводит к более высоким показателям конверсии и улучшению бизнес-результатов.
- Автоматизированное тестирование производительности: интегрируйте тестирование производительности в ваш CI/CD конвейер для непрерывного мониторинга.
- Принятие решений на основе данных: основывайте свои усилия по оптимизации на конкретных метриках производительности и аналитических данных.
- Долгосрочное отслеживание производительности: отслеживайте производительность вашего сайта с течением времени, чтобы выявлять тенденции и измерять влияние ваших оптимизаций.
Ключевые особенности Lighthouse CI
- Автоматизированные аудиты: запускает аудиты Lighthouse автоматически в рамках вашего процесса CI/CD.
- Бюджеты производительности: устанавливайте бюджеты производительности, чтобы ваш сайт оставался в пределах допустимых пороговых значений.
- Отслеживание регрессий: отслеживает регрессии производительности с течением времени, позволяя выявлять изменения в коде, которые их вызвали.
- Действенные рекомендации: предоставляет подробные отчеты с практическими рекомендациями по улучшению производительности вашего сайта.
- Настраиваемая конфигурация: настраивайте Lighthouse CI в соответствии с вашими конкретными потребностями и требованиями.
- Интеграция с инструментами CI/CD: легко интегрируется с популярными инструментами CI/CD, такими как Jenkins, CircleCI, GitHub Actions и GitLab CI.
- Открытый исходный код: Lighthouse CI является проектом с открытым исходным кодом, что означает его бесплатное использование и модификацию.
Настройка Lighthouse CI: пошаговое руководство
Вот подробное руководство по настройке Lighthouse CI для вашего проекта:
1. Установка Lighthouse CI CLI
Сначала вам нужно установить интерфейс командной строки (CLI) Lighthouse CI глобально с помощью npm или yarn:
npm install -g @lhci/cli
yarn global add @lhci/cli
2. Конфигурация Lighthouse CI
Создайте файл lighthouserc.js
в корне вашего проекта для настройки Lighthouse CI. Этот файл определяет URL-адреса для аудита, правила проверок и другие параметры конфигурации.
Вот базовый пример файла lighthouserc.js
:
module.exports = {
ci:
{
collect: {
url: ['http://localhost:3000', 'http://localhost:3000/about']
},
assert: {
preset: 'lighthouse:recommended'
},
upload: {
target: 'temporary-public-storage'
},
},
};
Объяснение:
collect.url
: указывает URL-адреса, которые будет проверять Lighthouse. В этом примере мы проверяем главную страницу и страницу «О нас» сайта, работающего наlocalhost:3000
. Не забудьте заменить это на URL-адреса, актуальные для *вашего* проекта, которые могут включать и тестовые окружения.assert.preset
: использует пресетlighthouse:recommended
, который применяет набор предопределенных проверок, основанных на рекомендациях Lighthouse. Это хорошая отправная точка, но вы можете настроить эти проверки по мере необходимости.upload.target
: настраивает, куда будут загружаться результаты Lighthouse CI.temporary-public-storage
полезно для тестирования и разработки, но для производственных сред обычно требуется более постоянное решение для хранения (обсуждается далее).
3. Интеграция Lighthouse CI в ваш CI/CD конвейер
Следующий шаг — интеграция Lighthouse CI в ваш CI/CD конвейер. Точные шаги будут зависеть от вашего провайдера CI/CD, но общий процесс включает добавление скрипта в вашу конфигурацию CI/CD, который запускает команды Lighthouse CI.
Пример использования GitHub Actions:
Создайте файл с именем .github/workflows/lighthouse-ci.yml
в вашем репозитории со следующим содержимым:
name: Lighthouse CI
on:
push:
branches: [main]
pull_request:
jobs:
lighthouse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install dependencies
run: npm ci
- name: Run Lighthouse CI
run: |
npm install -g @lhci/cli@0.11.x
lhci autorun
Объяснение:
on.push.branches
: запускает рабочий процесс при пушах в веткуmain
.on.pull_request
: запускает рабочий процесс при pull-запросах.jobs.lighthouse.runs-on
: указывает операционную систему для задачи (в данном случае Ubuntu).steps
: определяет шаги, которые будут выполнены в задаче:actions/checkout@v3
: клонирует репозиторий.actions/setup-node@v3
: настраивает Node.js.npm ci
: устанавливает зависимости.Run Lighthouse CI
: выполняет команды Lighthouse CI:npm install -g @lhci/cli@0.11.x
: устанавливает Lighthouse CI CLI глобально. *Важно*: всегда рекомендуется фиксировать конкретную версию.lhci autorun
: запускает Lighthouse CI в режиме «autorun», который автоматически собирает аудиты, проверяет бюджеты производительности и загружает результаты.
Важные соображения по интеграции CI/CD:
- Запуск сервера: перед запуском
lhci autorun
убедитесь, что ваш веб-сервер запущен (например, с помощьюnpm start
). Возможно, вам потребуется добавить шаг в вашу конфигурацию CI/CD для запуска сервера в фоновом режиме. - Миграции базы данных: если ваше приложение зависит от базы данных, убедитесь, что миграции базы данных выполняются в рамках вашего процесса CI/CD *перед* запуском Lighthouse CI.
- Переменные окружения: если вашему приложению требуются переменные окружения, убедитесь, что они правильно настроены в вашей среде CI/CD.
4. Запуск Lighthouse CI
Теперь, когда вы отправляете изменения в ветку main
или создаете pull-запрос, рабочий процесс Lighthouse CI будет запускаться автоматически. Результаты будут доступны в интерфейсе GitHub Actions.
5. Просмотр результатов Lighthouse CI
Результаты Lighthouse CI будут загружены в место, указанное в вашем файле lighthouserc.js
(например, temporary-public-storage
). Вы можете получить доступ к этим результатам, перейдя по ссылке, предоставленной в выводе CI/CD. Эти результаты предоставляют подробную информацию о производительности вашего сайта, доступности, SEO и лучших практиках.
Настройка проверок и бюджетов производительности
Lighthouse CI позволяет настраивать проверки и бюджеты производительности, чтобы гарантировать, что ваш сайт соответствует вашим целям по производительности. Проверки — это правила, которые сверяют конкретные метрики производительности (например, First Contentful Paint, Largest Contentful Paint) с предопределенными пороговыми значениями. Бюджеты производительности определяют допустимые пределы для различных метрик производительности.
Вот пример того, как настроить проверки в вашем файле lighthouserc.js
:
module.exports = {
ci: {
collect: {
url: ['http://localhost:3000']
},
assert: {
assertions: {
'first-contentful-paint': ['warn', { maxNumericValue: 2000 }],
'largest-contentful-paint': ['warn', { maxNumericValue: 2500 }],
'cumulative-layout-shift': ['warn', { maxNumericValue: 0.1 }],
'total-blocking-time': ['warn', { maxNumericValue: 500 }],
'categories:performance': ['warn', { minScore: 0.9 }],
'categories:accessibility': ['error', { minScore: 0.8 }],
}
},
upload: {
target: 'temporary-public-storage'
},
}
};
Объяснение:
first-contentful-paint
: устанавливает порог предупреждения для First Contentful Paint (FCP) в 2000 мс.largest-contentful-paint
: устанавливает порог предупреждения для Largest Contentful Paint (LCP) в 2500 мс.cumulative-layout-shift
: устанавливает порог предупреждения для Cumulative Layout Shift (CLS) в 0.1.total-blocking-time
: устанавливает порог предупреждения для Total Blocking Time (TBT) в 500 мс.categories:performance
: устанавливает порог предупреждения для общей оценки категории Performance в 0.9.categories:accessibility
: устанавливает порог ошибки для общей оценки категории Accessibility в 0.8.
Уровни проверок:
off
: отключает проверку.warn
: отображает предупреждение, если проверка не пройдена.error
: приводит к сбою запуска Lighthouse CI, если проверка не пройдена.
Настройка проверок:
Вы можете настраивать проверки в соответствии с вашими конкретными потребностями. Например, вы можете установить более строгие пороговые значения для критически важных метрик производительности или отключить проверки, которые не имеют отношения к вашему приложению.
Выбор цели для загрузки результатов Lighthouse CI
Опция upload.target
в вашем файле lighthouserc.js
указывает, куда будут загружаться результаты Lighthouse CI. Цель temporary-public-storage
удобна для тестирования и разработки, но она не подходит для производственных сред, поскольку данные не являются постоянными.
Вот некоторые альтернативные цели для загрузки:
- Сервер Lighthouse CI: рекомендуемый подход для производственных сред — использование сервера Lighthouse CI. Сервер Lighthouse CI предоставляет постоянное хранилище для ваших результатов Lighthouse CI, а также пользовательский интерфейс для их просмотра и анализа. Его можно развернуть у различных облачных провайдеров или разместить на вашей собственной инфраструктуре.
- Google Cloud Storage: вы можете загружать результаты Lighthouse CI в бакет Google Cloud Storage. Это экономичное и масштабируемое решение для хранения ваших данных.
- Amazon S3: аналогично Google Cloud Storage, вы можете загружать результаты Lighthouse CI в бакет Amazon S3.
Настройка сервера Lighthouse CI:
Настройка сервера Lighthouse CI включает следующие шаги:
- Установка сервера Lighthouse CI: вы можете установить сервер Lighthouse CI с помощью npm или yarn:
- Настройка базы данных: сервер Lighthouse CI требует базу данных для хранения своих данных. Вы можете использовать различные базы данных, включая PostgreSQL, MySQL и SQLite. Настройте параметры подключения к базе данных в файле
.env
. - Запуск сервера Lighthouse CI: запустите сервер Lighthouse CI с помощью команды
lhci server
. - Настройка Lighthouse CI CLI для использования сервера: обновите ваш файл
lighthouserc.js
, чтобы использовать сервер Lighthouse CI в качестве цели для загрузки:
npm install -g @lhci/server
yarn global add @lhci/server
module.exports = {
ci: {
collect: {
url: ['http://localhost:3000']
},
assert: {
preset: 'lighthouse:recommended'
},
upload: {
target: 'lhci',
serverBaseUrl: 'http://your-lhci-server.com',
token: 'YOUR_LHCI_TOKEN'
},
}
};
Замените http://your-lhci-server.com
на URL вашего сервера Lighthouse CI и YOUR_LHCI_TOKEN
на токен доступа для вашего проекта.
Лучшие практики использования Lighthouse CI
Чтобы извлечь максимальную пользу из Lighthouse CI, следуйте этим лучшим практикам:
- Запускайте Lighthouse CI при каждом изменении кода: интегрируйте Lighthouse CI в ваш CI/CD конвейер для запуска аудитов при каждом изменении кода. Это поможет вам выявлять регрессии производительности на ранней стадии.
- Устанавливайте бюджеты производительности: определите бюджеты производительности, чтобы ваш сайт оставался в пределах допустимых пороговых значений.
- Отслеживайте тенденции производительности: отслеживайте производительность вашего сайта с течением времени, чтобы выявлять тенденции и измерять влияние ваших оптимизаций.
- Приоритизируйте усилия по оптимизации: сосредоточьтесь на оптимизации наиболее критичных метрик производительности в первую очередь.
- Используйте реальные данные: используйте реальные данные для обоснования ваших усилий по оптимизации. Например, вы можете использовать Google Analytics для определения страниц, которые чаще всего посещают ваши пользователи.
- Тестируйте на реальных устройствах: тестируйте ваш сайт на реальных устройствах, чтобы убедиться, что он хорошо работает в реальных условиях.
- Регулярно просматривайте результаты Lighthouse CI: убедитесь, что вы регулярно просматриваете результаты Lighthouse CI и принимаете меры для устранения любых выявленных проблем с производительностью.
- Оптимизируйте изображения: оптимизируйте ваши изображения, чтобы уменьшить их размер файла без ущерба для качества. Для этого полезны такие инструменты, как ImageOptim (macOS), TinyPNG и ImageKit.
- Минифицируйте CSS и JavaScript: минифицируйте ваши файлы CSS и JavaScript, чтобы уменьшить их размер. В этом могут помочь такие инструменты, как UglifyJS и CSSNano.
- Используйте кэширование в браузере: используйте кэширование в браузере, чтобы уменьшить количество запросов, которые ваш сайт делает к серверу.
- Используйте сеть доставки контента (CDN): используйте CDN для распространения контента вашего сайта на серверы по всему миру. Это может улучшить время загрузки для пользователей в разных географических регионах. Популярными CDN являются такие сервисы, как Cloudflare и Amazon CloudFront.
- Откладывайте загрузку изображений вне экрана: реализуйте отложенную загрузку (lazy loading) для изображений, которые не видны сразу на экране. Это может значительно улучшить начальное время загрузки страницы. Для простой отложенной загрузки можно использовать атрибут
loading="lazy"
. - Устраняйте ресурсы, блокирующие рендеринг: выявляйте и устраняйте ресурсы, которые блокируют рендеринг вашей страницы. Это часто включает встраивание критического CSS и откладывание некритического CSS и JavaScript.
- Сокращайте время выполнения JavaScript: профилируйте ваш JavaScript-код для выявления и оптимизации медленно работающих функций. Такие техники, как разделение кода (code splitting) и встряхивание дерева (tree shaking), могут помочь уменьшить количество JavaScript, которое необходимо загружать и выполнять.
Продвинутые техники Lighthouse CI
Когда вы освоите основы Lighthouse CI, вы можете изучить некоторые продвинутые техники для дальнейшего улучшения мониторинга производительности:
- Пользовательские аудиты Lighthouse: вы можете создавать пользовательские аудиты Lighthouse для тестирования конкретных проблем производительности, актуальных для вашего приложения.
- Конфигурация Headless Chrome: настройте Headless Chrome для использования específicos эмуляций устройств или настроек замедления сети.
- Интеграция с инструментами мониторинга: интегрируйте Lighthouse CI с вашими существующими инструментами мониторинга (например, New Relic, Datadog), чтобы получить более полное представление о производительности вашего сайта.
- Визуальное регрессионное тестирование: сочетайте Lighthouse CI с инструментами визуального регрессионного тестирования для обнаружения визуальных изменений, которые могут повлиять на производительность.
Lighthouse CI для глобальной аудитории: что учесть для международных сайтов
При использовании Lighthouse CI для сайтов, ориентированных на глобальную аудиторию, учитывайте следующее:
- Тестируйте из нескольких местоположений: время ответа сервера может значительно варьироваться в зависимости от местоположения пользователя. Используйте CDN (сеть доставки контента) и рассмотрите возможность запуска аудитов Lighthouse CI из разных географических регионов, чтобы получить более точную картину производительности для ваших международных пользователей. Некоторые провайдеры CI/CD предлагают опции для указания географического местоположения исполнителя (runner).
- Учитывайте условия сети: скорости сети и задержки сильно различаются по всему миру. Симулируйте различные условия сети во время ваших аудитов Lighthouse CI, чтобы понять, как ваш сайт работает при различных ограничениях. Lighthouse позволяет замедлять сетевое соединение, симулируя более медленные соединения, такие как 3G.
- Локализация контента: убедитесь, что ваш локализованный контент правильно оптимизирован. Это включает оптимизацию изображений для разных языков и наборов символов, а также правильную кодировку для избежания проблем с отображением.
- Загрузка шрифтов: оптимизируйте загрузку шрифтов для разных языков. Рассмотрите возможность использования font-display: swap, чтобы предотвратить невидимость текста во время загрузки шрифта.
- Сторонние скрипты: будьте внимательны к сторонним скриптам, так как они могут значительно влиять на производительность, особенно для пользователей в регионах с более медленным сетевым соединением. Регулярно проверяйте производительность сторонних скриптов и рассмотрите возможность использования асинхронной загрузки или самостоятельного хостинга критически важных скриптов.
- Мобильная оптимизация: использование мобильных устройств широко распространено во многих частях мира. Убедитесь, что ваш сайт оптимизирован для мобильных устройств и что ваши аудиты Lighthouse CI включают тесты, специфичные для мобильных устройств.
Устранение распространенных проблем с Lighthouse CI
Вот некоторые распространенные проблемы, с которыми вы можете столкнуться при использовании Lighthouse CI, и способы их устранения:
- Lighthouse CI завершается с ошибкой «Timeout»: это может произойти, если ваш сайт загружается слишком долго или если Lighthouse CI не может подключиться к вашему сайту. Попробуйте увеличить значение тайм-аута в вашем файле
lighthouserc.js
или проверьте логи сервера вашего сайта на наличие ошибок. - Lighthouse CI сообщает о непоследовательных результатах: результаты Lighthouse могут незначительно варьироваться между запусками из-за условий сети или других факторов. Запустите несколько аудитов, чтобы получить более стабильное среднее значение.
- Lighthouse CI не может загрузить результаты: проверьте вашу конфигурацию
upload.target
и убедитесь, что ваш сервер Lighthouse CI запущен и доступен. Также проверьте, что у вас настроен правильный токен доступа. - Lighthouse CI сообщает о неожиданных регрессиях производительности: исследуйте изменения в коде, которые были сделаны до обнаружения регрессии. Используйте отчеты Lighthouse CI для определения конкретных метрик производительности, которые ухудшились, и сосредоточьте свои усилия по оптимизации на этих областях.
Заключение
Frontend Lighthouse CI — это мощный инструмент для непрерывного мониторинга производительности веб-приложений. Интегрируя Lighthouse CI в ваш CI/CD конвейер, вы можете проактивно выявлять и устранять проблемы с производительностью, обеспечивая оптимальный пользовательский опыт на вашем сайте. Не забывайте адаптировать вашу настройку, правила проверок и места тестирования для глобальной аудитории, чтобы создать наилучший возможный опыт для пользователей по всему миру.
Следуя шагам и лучшим практикам, изложенным в этом руководстве, вы можете значительно улучшить производительность вашего сайта, снизить показатели отказов, повысить конверсию и, в конечном итоге, достичь своих бизнес-целей. Начните внедрять Lighthouse CI сегодня и раскройте весь потенциал ваших веб-приложений.