Выбор рендерера: svg, canvas, html

SVG-рендерер в Lottie Web представляет собой наиболее универсальный и функционально полный способ отображения анимаций. В основе лежит преобразование каждого кадра композиции в набор SVG-элементов, управляемых через DOM.

Особенности реализации

SVG-рендеринг опирается на векторную модель браузера. Каждый слой анимации превращается в отдельные SVG-элементы: path, g, clipPath, mask, text. Манипуляции происходят через изменение атрибутов и трансформаций.

Ключевая характеристика — сохранение всей структуры анимации в виде DOM-дерева.

Сильные стороны SVG-рендерера:

  • Высокая чёткость на любых масштабах
  • Полная доступность DOM для инспектирования
  • Поддержка сложных векторных форм
  • Корректная работа с масштабированием без потери качества

Поддерживаемые возможности

SVG-рендерер максимально близок к возможностям After Effects, экспортируемым через Bodymovin:

  • Маски и тримминг путей (trim paths)
  • Градиенты (линейные и радиальные)
  • Трансформации слоёв
  • Прозрачности и режимы наложения
  • Текстовые слои (с ограничениями по шрифтам)
  • Parent-подчинённые связи слоёв

Ограничения

Несмотря на функциональность, SVG-рендерер имеет ряд архитектурных ограничений:

  • Высокая нагрузка на DOM при сложных сценах
  • Просадки производительности при большом количестве элементов
  • Медленная перерисовка при частых обновлениях
  • Увеличение времени layout/reflow

Особенно критичным становится рост количества узлов при сложных композициях, где каждый кадр требует обновления множества атрибутов.


Canvas-рендерер

Canvas-рендерер использует отрисовку через <canvas> и API 2D-контекста. В отличие от SVG, он не создаёт DOM-структуру для каждого элемента, а рисует пиксельное изображение каждого кадра.

Архитектура отрисовки

В canvas-модели каждый кадр анимации полностью перерисовывается. Это означает, что состояние сцены хранится в памяти, а не в DOM.

Процесс включает:

  • очистку canvas
  • пересчёт состояния слоёв
  • последовательную отрисовку фигур
  • применение трансформаций и масок

Производительность

Canvas-рендерер демонстрирует стабильную производительность при большом количестве элементов. Это связано с отсутствием DOM-операций.

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

  • Высокая скорость при сложных сценах
  • Независимость от DOM-дерева
  • Стабильный FPS при большом количестве объектов
  • Предсказуемое потребление памяти

Ограничения canvas

Пиксельная природа накладывает функциональные ограничения:

  • Отсутствие доступности отдельных элементов для инспекции
  • Ограниченные возможности взаимодействия с объектами сцены
  • Сложности с масштабированием без перерасчёта
  • Потеря векторной природы при рендере

Также отсутствует прямой доступ к отдельным слоям после отрисовки — всё становится частью растрового изображения текущего кадра.

Когда canvas становится предпочтительным

Canvas-движок проявляет преимущества в следующих сценариях:

  • Большое количество одновременно анимируемых элементов
  • Интенсивные изменения кадровой структуры
  • Дашборды и интерфейсы с постоянной анимацией
  • Сцены с высокой плотностью частиц и эффектов

HTML-рендерер

HTML-рендерер (DOM-based rendering) использует обычные HTML-элементы, позиционируемые и трансформируемые через CSS. В отличие от SVG, здесь используется не векторная графика, а блочная модель DOM.

Принцип работы

Каждый слой анимации превращается в HTML-элемент, чаще всего div, с применением CSS-свойств:

  • transform: matrix(...)
  • opacity
  • clip-path
  • filter (в ограниченном виде)

Анимация достигается через динамическое изменение стилей.

Особенности реализации

HTML-рендерер ближе всего к UI-слою веб-приложений. Он использует GPU-ускорение браузера через CSS-трансформации.

Характерные черты:

  • Использование layout-модели браузера
  • Сильная зависимость от CSS engine
  • Возможность интеграции с UI-элементами
  • Поддержка z-index и стандартного потока документа

Преимущества HTML-рендерера

  • Высокая производительность при простых анимациях
  • Лёгкая интеграция с интерфейсом приложения
  • Возможность комбинирования с обычными DOM-элементами
  • Ускорение через CSS transform и opacity

Ограничения

HTML-рендерер имеет наиболее выраженные ограничения по сравнению с SVG и canvas:

  • Ограниченная поддержка сложных векторных форм
  • Слабая реализация масок и сложных эффектов
  • Потеря точности при сложных кривых
  • Зависимость от особенностей CSS-движка браузера

Сравнение подходов рендеринга

Производительность

Canvas обеспечивает наиболее стабильную производительность при сложных сценах. SVG показывает деградацию при росте числа DOM-узлов. HTML зависит от сложности CSS-трансформаций и структуры документа.

Качество графики

SVG сохраняет идеальную векторную чёткость. Canvas обеспечивает визуально стабильный результат, но в растровой форме. HTML ограничен возможностями CSS и не всегда точно воспроизводит оригинальную анимацию.

Масштабируемость

SVG:

  • идеальная масштабируемость без потери качества

Canvas:

  • фиксированное разрешение, требует перерасчёта при изменении размера

HTML:

  • зависит от CSS трансформаций и viewport

Поддержка эффектов After Effects

Возможность SVG Canvas HTML
Маски + + ±
Градиенты + + ±
Текст + ± ±
Blend modes ± ± -
Trim paths + + -
Blur/filters ± ± ±

Архитектурные различия внутри Lottie Web

Lottie Web использует единый JSON-модуль анимации, но различает способы рендеринга через абстрактный слой renderer.

Каждый рендерер реализует собственный pipeline:

  • парсинг композиции
  • построение внутреннего состояния
  • обновление кадров
  • применение трансформаций
  • отрисовка результата

SVG взаимодействует с DOM напрямую, canvas полностью контролирует пиксельный буфер, HTML работает через CSSOM.


Память и нагрузка на систему

SVG увеличивает нагрузку на память за счёт DOM-узлов. Canvas использует буферы и состояние сцены в JS, что даёт более предсказуемое потребление. HTML создаёт промежуточные DOM-элементы, но обычно менее тяжёлые, чем SVG-структуры.


Практические критерии выбора

SVG становится рациональным при:

  • необходимости масштабируемой графики
  • интерактивных анимациях с доступом к слоям
  • ограниченном количестве элементов
  • высокой важности визуальной точности

Canvas становится предпочтительным при:

  • сложных сценах с большим количеством объектов
  • высокочастотной анимации
  • необходимости стабильного FPS
  • отсутствии необходимости DOM-интеракции

HTML применяется при:

  • интеграции анимации в UI-интерфейсы
  • простых композициях
  • необходимости CSS-интеграции
  • использовании стандартного DOM-потока

Поведение при изменении размеров контейнера

SVG автоматически адаптируется за счёт viewBox и preserveAspectRatio. Canvas требует ручного пересчёта размеров и перерисовки. HTML зависит от CSS-свойств контейнера и может требовать дополнительной синхронизации transform-значений.


Обработка сложных эффектов

Эффекты типа blur, glow, shadow и blending имеют разную степень поддержки:

  • SVG использует фильтры SVG filter primitives
  • Canvas применяет глобальные операции контекста или ручную имитацию эффектов
  • HTML опирается на CSS filter, что ограничивает точность и производительность

Поведение при масштабных композициях

При росте сложности сцены:

  • SVG начинает страдать от reflow и repaint операций
  • Canvas сохраняет стабильность за счёт единого полотна
  • HTML упирается в производительность CSS engine и layout перерасчёты

Влияние браузерной реализации

Разные браузеры по-разному оптимизируют каждый рендерер:

  • SVG чувствителен к реализации DOM и layout engine
  • Canvas зависит от оптимизации GPU/CPU raster pipeline
  • HTML зависит от CSS compositor layer и механизма ускорения transform

Эти различия могут приводить к разной производительности одной и той же анимации в разных окружениях.