Playwright предоставляет мощные возможности для измерения производительности веб-приложений. Основное внимание уделяется сбору метрик загрузки страниц, времени отклика и поведения пользовательского интерфейса. Эти данные помогают выявлять узкие места, оптимизировать скрипты и улучшать пользовательский опыт.
Для начала необходимо включить сбор Performance
Metrics через объект page:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://example.com');
const metrics = await page.evaluate(() => JSON.stringify(window.performance.toJSON()));
console.log(JSON.parse(metrics));
await browser.close();
})();
Ключевой момент:
window.performance.toJSON() возвращает набор стандартных
браузерных метрик, включая время загрузки, обработку ресурсов, DNS
lookup и TCP handshake. Эти данные являются базой для анализа
производительности страницы.
Navigation Timing Позволяет измерять ключевые этапы загрузки страницы:
navigationStart — момент начала навигации.responseStart — момент получения первого байта
ответа.domContentLoadedEventEnd — завершение обработки
DOM.loadEventEnd — окончание загрузки всех ресурсов.Resource Timing Используется для анализа загрузки отдельных ресурсов, таких как скрипты, стили и изображения:
fetchStart — начало запроса ресурса.responseEnd — завершение получения ресурса.duration — общее время загрузки ресурса.Paint Timing Отражает визуальную готовность страницы:
first-paint — первый визуальный рендер.first-contentful-paint — отображение основного
контента.Long Tasks и взаимодействие пользователя Позволяет выявлять блокировки основного потока:
PerformanceObserver для отслеживания
долгих задач (longtask).await page.goto('https://example.com');
const metrics = await page.evaluate(() => {
const [fcp] = performance.getEntriesByName('first-contentful-paint');
const resources = performance.getEntriesByType('resource');
return {
fcp: fcp.startTime,
resourceCount: resources.length,
resources: resources.map(r => ({
name: r.name,
duration: r.duration
}))
};
});
console.log(metrics);
Вывод: fcp.startTime показывает, через
сколько миллисекунд после начала загрузки появился первый видимый
контент. Анализ resources помогает выявить «тяжёлые» файлы,
замедляющие страницу.
Playwright поддерживает интеграцию с CDP для более детальной аналитики производительности:
const client = await context.newCDPSession(page);
await client.send('Performance.enable');
const performanceMetrics = await client.send('Performance.getMetrics');
console.log(performanceMetrics.metrics);
Преимущества CDP:
Метрики производительности можно интегрировать прямо в автоматические тесты:
test('Page load time should be under 2 seconds', async ({ page }) => {
await page.goto('https://example.com');
const metrics = await page.evaluate(() => performance.timing.loadEventEnd - performance.timing.navigationStart);
expect(metrics).toBeLessThan(2000);
});
Особенности подхода:
loadEventEnd - navigationStart отражает полный
цикл загрузки.PerformanceObserver для мониторинга долгих
задач и измерения времени отклика.Метрики Playwright позволяют проводить сравнительный анализ:
Метрики можно автоматизировать на уровне CI/CD:
Метрики производительности в Playwright предоставляют детальную и гибкую платформу для мониторинга и анализа скорости работы веб-приложений, позволяя выявлять узкие места и гарантировать высокий уровень UX.