Оптимизация размера образа

Оптимизация размера образа — критический аспект при автоматизации браузерного тестирования с использованием Puppeteer. Правильное управление размерами страниц, изображений и ресурсов напрямую влияет на скорость выполнения скриптов, потребление памяти и стабильность тестов. В контексте Puppeteer оптимизация может касаться нескольких ключевых направлений: конфигурации браузера, работы с контентом страницы и обработки скриншотов или PDF.


Настройка размеров окна браузера

Размер окна браузера определяет видимую область (viewport) страницы. Puppeteer позволяет гибко управлять этим параметром через опцию viewport при создании экземпляра страницы:

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 720 });

Рекомендации по оптимизации:

  • Использовать минимально необходимый размер, чтобы уменьшить нагрузку на рендеринг и потребление памяти.
  • Для тестов адаптивного дизайна создавать несколько страниц с разными размерами viewport, вместо изменения размера одной и той же страницы динамически.
  • Избегать чрезмерно больших размеров (например, Full HD на каждом тесте), если нет необходимости проверять высокие разрешения.

Управление весом скриншотов

Скриншоты часто являются самой ресурсоёмкой частью тестов. Puppeteer поддерживает настройку формата и качества изображений, что позволяет оптимизировать их размер без потери информативности.

await page.screenshot({
  path: &
  type: 'jpeg',
  quality: 70,
  fullPage: true
});

Ключевые моменты:

  • Формат jpeg лучше подходит для фотографий и страниц с большим количеством градиентов, а png — для страниц с плоской графикой или прозрачными элементами.
  • Параметр quality позволяет снизить размер файла до 30–70%, что существенно ускоряет обработку и хранение.
  • Опция clip позволяет снимать только часть страницы, если весь экран не нужен, что снижает нагрузку на память.

Ограничение загрузки ресурсов

Многие страницы содержат тяжелые изображения, видео или сторонние скрипты, которые замедляют тесты и увеличивают размер используемой памяти. Puppeteer предоставляет возможности блокировки ресурсов:

await page.setRequestInterception(true);
page.on('request', request => {
  if (['image', 'stylesheet', 'font'].includes(request.resourceType())) {
    request.abort();
  } else {
    request.continue();
  }
});

Преимущества:

  • Исключение ненужных ресурсов ускоряет загрузку страниц.
  • Уменьшает использование памяти и общий размер снимков.
  • Позволяет концентрироваться на тестируемой функциональности, не отвлекаясь на внешние элементы.

Оптимизация рендеринга PDF

Puppeteer часто используется для генерации PDF-документов из веб-страниц. Размер PDF можно оптимизировать за счёт выбора формата страницы, масштаба и качества шрифтов:

await page.pdf({
  path: 'document.pdf',
  format: 'A4',
  printBackground: true,
  scale: 0.8
});

Рекомендации:

  • Масштабирование (scale) позволяет уменьшить разрешение элементов и вес файла без потери читаемости.
  • Использование форматов A4 или Letter снижает непредсказуемые разрывы и лишние пустые области.
  • Включение или отключение фоновых изображений (printBackground) напрямую влияет на размер PDF.

Минимизация потребления памяти

Puppeteer создаёт полноценный экземпляр Chromium, поэтому управление памятью важно для больших тестовых прогонов:

  • Повторное использование страниц: создавать новые страницы только при необходимости. Часто достаточно очищать содержимое текущей страницы через page.goto(‘about:blank’).
  • Закрытие страниц: после завершения тестов закрывать страницы и освобождать ресурсы.
  • Использование безголового режима: headless: true экономит ресурсы, особенно при множественных параллельных тестах.
  • Оптимизация кода скриптов: избегать массивов больших данных в контексте страницы, переносить обработку данных на Node.js.

Заключение по методам

Оптимизация размера образа в Puppeteer — комплексная задача, включающая:

  • Тщательную настройку viewport.
  • Контроль формата и качества скриншотов.
  • Ограничение загрузки лишних ресурсов.
  • Эффективное управление PDF и памятью браузера.

Следование этим принципам позволяет ускорять тесты, уменьшать использование дискового пространства и создавать стабильные, масштабируемые сценарии автоматизации.