SnapDOM - когда нужно быстро и точно сохранить веб-страницу как изображение

10 авг 2025
8,100
303
21
4 недели

SnapDOM hero image

Вы когда-нибудь сталкивались с ситуацией, когда нужно сохранить элемент сайта как изображение? Возможно, для демонстрации бага, создания превью или экспорта интерактивного графика. Оказывается, большинство библиотек для этой задачи либо слишком медленные, либо не поддерживают современные CSS-эффекты. Именно эту проблему решает SnapDOM — инструмент, который делает скриншоты DOM-элементов с рекордной скоростью.

Что такое SnapDOM?

SnapDOM — это JavaScript-библиотека для точного захвата HTML-элементов в различных графических форматах. В отличие от аналогов вроде html2canvas, она:

  • Работает в 2-150 раз быстрее
  • Поддерживает тени, псевдоэлементы и Web Components
  • Не требует зависимостей
  • Предоставляет гибкие варианты экспорта

5 причин попробовать SnapDOM

  1. Молниеносная скорость По тестам разработчиков, SnapDOM обрабатывает простые элементы за 0.4 мс, а сложные страницы — в среднем в 8 раз быстрее аналогов.

  2. Полноценный захват стилей Библиотека корректно отображает:

    Реклама
    • Псевдоэлементы (::before, ::after)
    • CSS-фильтры и трансформации
    • Шрифты (включая Font Awesome)
    • Тени и градиенты
  3. Гибкие форматы экспорта

    // Простейший пример использования
    const element = document.querySelector('#chart');
    const pngImage = await snapdom.toPng(element, { scale: 2 });
    document.body.appendChild(pngImage);
    
  4. Поддержка адаптивных размеров Можно задавать фиксированные размеры или сохранять пропорции:

    // Фиксированная ширина с автоматической высотой
    await snapdom(element, { width: 800 });
    
    // Точные размеры (может исказить контент)
    await snapdom(element, { width: 800, height: 600 });
    
  5. Работа с CORS-ресурсами Для изображений с ограничениями доступа можно использовать прокси:

    await snapdom(element, {
      useProxy: 'https://corsproxy.io/?url='
    });
    

Под капотом

SnapDOM использует SVG как промежуточный формат, что объясняет его скорость и точность рендеринга. Основные этапы работы:

  1. Анализ DOM-структуры
  2. Преобразование стилей в inline-формат
  3. Генерация SVG
  4. Конвертация в целевой формат (по необходимости)

Кому пригодится?

  • Фронтенд-разработчики: для создания превью интерфейсов
  • Тестировщики: для автоматического скриншотинга багов
  • Аналитики: для экспорта графиков и дашбордов
  • Дизайнеры: для сохранения состояний анимированных элементов

Установка

Вариантов подключения несколько:

# NPM
npm i @zumer/snapdom

# Yarn
yarn add @zumer/snapdom

# CDN
<script src="https://cdn.jsdelivr.net/npm/@zumer/snapdom/dist/snapdom.min.js"></script>

Ограничения

  • Не поддерживаются iframe
  • В Safari WebP конвертируется в PNG
  • Требуется CORS-доступ для внешних ресурсов

Вердикт

SnapDOM — отличное решение для тех, кому важны скорость и качество захвата веб-контента. Особенно рекомендую:

  • Если устали ждать рендеринга в html2canvas
  • Если нужна поддержка современных CSS-эффектов
  • Если важна возможность тонкой настройки вывода

Попробовать в действии можно на официальном демо. А если понравится — не забудьте поставить звезду на GitHub!

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.