Lottie Web поддерживает несколько рендереров, и выбор между SVG, Canvas и HTML напрямую влияет на производительность, точность воспроизведения анимации и ограничения по использованию графических возможностей. Один и тот же JSON-файл анимации может вести себя по-разному в зависимости от выбранного движка, поскольку каждый рендерер использует собственную модель отрисовки и управления слоями.
SVG-рендерер является наиболее часто используемым вариантом в Lottie Web. Он основан на векторной графике и DOM-элементах SVG, что обеспечивает высокую точность воспроизведения анимаций, созданных в After Effects.
Основная особенность SVG-рендерера заключается в том, что каждая
фигура, маска и слой преобразуются в соответствующие SVG-элементы
(<path>, <g>,
<clipPath> и т.д.). Это позволяет браузеру
использовать встроенные механизмы масштабирования без потери
качества.
Ключевые характеристики SVG-рендерера:
Однако у SVG есть ограничения, которые становятся критичными в сложных сценах:
SVG-рендерер особенно эффективен в сценариях, где важна четкость интерфейсной графики: иконки, небольшие иллюстрации, UI-анимации.
Canvas-рендерер в Lottie Web использует 2D Canvas API, что полностью меняет модель отрисовки: вместо DOM-дерева используется пиксельный буфер.
Каждый кадр анимации полностью перерисовывается на
<canvas> элементе, что позволяет избежать накладных
расходов на управление DOM.
Особенности Canvas-рендерера:
Этот рендерер особенно эффективен для сложных сцен с большим количеством частиц, масок и трансформаций.
Однако модель Canvas имеет свои ограничения:
Canvas-рендерер часто используется в высоконагруженных интерфейсах, где важна стабильная частота кадров, а не интерактивность отдельных элементов.
HTML-рендерер (иногда называемый DOM renderer) представляет собой
промежуточный вариант между SVG и Canvas. Он создает структуру из
HTML-элементов (<div>, <span>,
<img>), позиционируя их с помощью CSS transforms.
Каждый слой Lottie превращается в DOM-элемент, а трансформации (позиция, масштаб, вращение, opacity) управляются через CSS свойства.
Ключевые особенности:
HTML-рендерер часто используется реже, чем SVG и Canvas, но имеет важное преимущество — максимальную гибкость в интеграции с интерфейсом приложения.
Ограничения HTML-рендерера:
Разные рендереры Lottie Web отличаются не только производительностью, но и внутренней архитектурой исполнения анимации.
SVG использует декларативную модель: браузер сам управляет отрисовкой через DOM и SVG-движок. Canvas — императивную модель: каждый кадр полностью рисуется вручную. HTML-рендерер занимает промежуточное положение, комбинируя DOM-структуру и CSS-трансформации.
Основные различия проявляются в следующих аспектах:
Производительность
Canvas обычно выигрывает при сложных сценах с большим количеством элементов. SVG быстрее в простых и средних по сложности анимациях. HTML может быть нестабильным при увеличении количества DOM-узлов.
Масштабирование
SVG обеспечивает идеальную масштабируемость. Canvas требует пересчета плотности пикселей (devicePixelRatio), иначе теряется четкость. HTML зависит от CSS transform scale и может давать визуальные артефакты.
Память
SVG и HTML потребляют память через DOM, тогда как Canvas хранит только пиксельный буфер, что иногда снижает нагрузку на структуру документа.
Маски (masks) и track matte — один из наиболее проблемных аспектов при работе с разными рендерами.
В SVG маски реализуются через <mask> и
<clipPath>, что соответствует нативной модели
векторной графики. Однако сложные анимации масок могут вызывать
значительные перерасчеты.
В Canvas маски эмулируются через операции сохранения и восстановления
контекста (save, restore) и глобальные
композиты (globalCompositeOperation). Это дает стабильную
производительность, но усложняет точное соответствие оригинальной
анимации After Effects.
В HTML-рендерере маски часто реализуются через clip-path
или дополнительные overlay-элементы, что может приводить к различиям
между браузерами.
Градиенты и эффекты в Lottie также ведут себя по-разному в зависимости от рендерера.
SVG поддерживает линейные и радиальные градиенты через
<linearGradient> и
<radialGradient>. Однако при сложных анимациях
градиентов могут возникать проблемы с производительностью.
Canvas реализует градиенты через API
createLinearGradient и createRadialGradient,
что обычно быстрее, но требует пересоздания при каждом кадре, если
параметры анимации изменяются.
HTML-рендерер зависит от CSS градиентов или растровых изображений, что ограничивает гибкость динамической анимации.
Тени (drop shadow, blur):
<feGaussianBlur>, часто дорогие по
CPUbox-shadow и filter: blur(),
GPU-ускорение, но ограниченная точностьВо всех рендерах Lottie использует единую систему трансформаций (position, scale, rotation, anchor point), но реализация различается.
SVG работает через transform атрибуты SVG и матрицы
трансформаций. Canvas использует контекстные матрицы
(ctx.translate, ctx.rotate,
ctx.scale). HTML применяет CSS
transform: matrix().
Критический момент — порядок применения трансформаций:
<g>Это может приводить к небольшим визуальным расхождениям между рендерами при сложных иерархиях слоев.
Текстовые слои являются одной из самых нестабильных частей при кросс-рендеринге.
SVG обычно преобразует текст в <text> элементы или
иногда в path (в зависимости от экспорта). Это обеспечивает точность, но
усложняет редактирование на лету.
Canvas часто рендерит текст через fillText и
strokeText, что быстрее, но зависит от системных
шрифтов.
HTML-рендерер использует обычные DOM-элементы
<div> или <span>, что дает
максимальную гибкость для CSS-стилизации, но может приводить к
несовпадению метрик шрифтов между платформами.
Особое внимание требуется при работе с Canvas, где критически важно учитывать devicePixelRatio. Без этого анимации будут выглядеть размытыми на Retina-дисплеях.
SVG автоматически масштабируется без дополнительных усилий.
HTML-рендерер требует ручной настройки transform: scale()
или управления font-size и layout.
Canvas-рендерер обычно требует явной установки размеров:
SVG-рендерер предпочтителен при:
Canvas-рендерер предпочтителен при:
HTML-рендерер используется при:
Одной из ключевых сложностей Lottie Web является отсутствие абсолютной идентичности между рендерами. Один и тот же JSON может выглядеть по-разному:
Эти расхождения особенно заметны при переходе между SVG и Canvas, где одна модель векторная, а другая растровая.
Дополнительно влияет браузерная специфика: Chrome, Safari и Firefox по-разному обрабатывают SVG-фильтры и canvas-операции, что усиливает расхождения.
Оптимизация Lottie-анимаций должна учитывать выбранный рендерер:
Для SVG:
Для Canvas:
Для HTML:
will-change: transform