13. Lighthouse & DevTools
Lighthouse — это автоматический инструмент аудита от Google. Оценивает производительность, SEO, доступность и лучшие практики по шкале 0-100.
Запуск Lighthouse
Заголовок раздела «Запуск Lighthouse»Chrome DevTools
Заголовок раздела «Chrome DevTools»F12 → Lighthouse → Analyze page loadВыберите:
- ✅ Performance
- ✅ Accessibility
- ✅ Best Practices
- ✅ SEO
- Устройство: Mobile / Desktop
npm install -g lighthouse
# Базовый аудитlighthouse https://example.com --output html --output-path report.html
# Только производительностьlighthouse https://example.com --only-categories=performance
# Мобильный аудитlighthouse https://example.com --emulated-form-factor=mobile
# JSON вывод для CIlighthouse https://example.com --output json --output-path report.jsonPageSpeed Insights
Заголовок раздела «PageSpeed Insights»https://pagespeed.web.dev/Показывает реальные данные из Chrome UX Report (CrUX) + Lighthouse.
Что проверяет Lighthouse?
Заголовок раздела «Что проверяет Lighthouse?»Performance (0-100)
Заголовок раздела «Performance (0-100)»| Метрика | Вес | Описание |
|---|---|---|
| FCP | 10% | First Contentful Paint |
| LCP | 25% | Largest Contentful Paint |
| TBT | 30% | Total Blocking Time |
| CLS | 15% | Cumulative Layout Shift |
| Speed Index | 10% | Визуальная скорость |
| TTI | 10% | Time to Interactive |
Цели: 90+ отлично, 50-89 нужно улучшить, < 50 плохо.
SEO (0-100)
Заголовок раздела «SEO (0-100)»- Title и meta description
- Robots.txt и canonical
- Viewport meta тег
- Читаемый размер текста
- Правильные ссылки
- Структурированные данные
Accessibility (0-100)
Заголовок раздела «Accessibility (0-100)»- Alt-теги для изображений
- Контрастность текста
- ARIA атрибуты
- Заголовки (правильная иерархия)
- Фокусируемые элементы
Best Practices
Заголовок раздела «Best Practices»- HTTPS
- Нет ошибок в консоли
- Современные API
- Безопасные запросы
Chrome DevTools — Performance Panel
Заголовок раздела «Chrome DevTools — Performance Panel»Запись профиля
Заголовок раздела «Запись профиля»1. F12 → Performance2. Нажмите Record (или Ctrl+Shift+E)3. Взаимодействуйте со страницей4. Нажмите StopЧто искать в профиле
Заголовок раздела «Что искать в профиле»Main Thread:- Long Tasks (красные!) → > 50ms блокировки- Layout (фиолетовый) → reflow- Paint (зелёный) → перерисовка- Script (жёлтый) → JS выполнение
Network:- Большие ресурсы- Медленные запросы (TTFB > 200ms)- Очередь запросов (HTTP/1.1)
Memory:- Постоянный рост → memory leak- GC паузы → частая сборка мусораNetwork Panel
Заголовок раздела «Network Panel»F12 → Network
Фильтры:- JS, CSS, Img, XHR — по типу ресурса- Large requests row — размеры видны- Capture screenshots — видеозапись загрузки
Полезные метрики:- DOMContentLoaded (синяя линия)- Load (красная линия)- TTFB (первый байт ответа)Автоматизация в CI/CD
Заголовок раздела «Автоматизация в CI/CD»// Запуск Lighthouse в GitHub Actionsname: Lighthouse CIon: [push]
jobs: lighthouse: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 - run: npm ci - run: npm run build - run: npm install -g @lhci/cli - run: lhci autorunmodule.exports = { ci: { collect: { url: ['http://localhost:3000/', 'http://localhost:3000/about/'], startServerCommand: 'npm start', }, assert: { assertions: { 'categories:performance': ['warn', { minScore: 0.9 }], 'categories:seo': ['error', { minScore: 0.9 }], 'categories:accessibility': ['warn', { minScore: 0.9 }], }, }, upload: { target: 'temporary-public-storage', }, },};Web Vitals в Production
Заголовок раздела «Web Vitals в Production»// Отправка метрик в аналитикуimport { onCLS, onFCP, onINP, onLCP, onTTFB } from 'web-vitals';
function sendToAnalytics({ name, value, rating, id }) { // Google Analytics 4 gtag('event', name, { event_category: 'Web Vitals', event_label: id, value: Math.round(name === 'CLS' ? value * 1000 : value), non_interaction: true, metric_rating: rating, // 'good', 'needs-improvement', 'poor' });}
onCLS(sendToAnalytics);onFCP(sendToAnalytics);onINP(sendToAnalytics);onLCP(sendToAnalytics);onTTFB(sendToAnalytics);