Библиотека поддерживает несколько стратегий отрисовки анимаций,
каждая из которых опирается на разные графические API браузера и
по-разному нагружает систему. Основные рендереры: SVG, Canvas и HTML
(DOM). Их поведение существенно различается при одинаковом
JSON-анимационном описании.
SVG-рендерер
SVG-режим основан на генерации и управлении DOM-узлами SVG-дерева.
Каждый слой анимации преобразуется в набор элементов
<path>, <g>,
<clipPath>, <mask> и других
SVG-конструкций.
Особенности реализации
SVG-рендерер работает через:
- прямое изменение атрибутов элементов DOM
- трансформации через
transform
- перерисовку в рамках layout/paint pipeline браузера
Производственные
характеристики
SVG-рендеринг показывает высокую точность визуализации при умеренной
нагрузке, но его производительность резко падает при увеличении
количества узлов.
Ключевые факторы нагрузки:
- большое количество DOM-элементов
- сложные path-анимации
- частые изменения атрибутов
d, transform,
opacity
Поведение при
масштабировании
При увеличении числа слоев наблюдается:
- рост cost reflow и repaint
- увеличение времени обработки каждого кадра
- деградация FPS при сложных масках и градиентах
SVG наиболее чувствителен к глубине дерева и количеству
группировок.
Canvas-рендерер
Canvas-режим использует 2D-контекст и рисование через API
CanvasRenderingContext2D. В отличие от SVG, здесь
отсутствует DOM-структура для каждого элемента анимации.
Принцип работы
Все слои преобразуются в последовательность команд:
ctx.save() / ctx.restore()
ctx.transform()
ctx.beginPath()
ctx.fill() / ctx.stroke()
Рендеринг происходит в одном bitmap-слое.
Производственные
характеристики
Canvas демонстрирует стабильную производительность при большом
количестве объектов.
Основные преимущества:
- отсутствие DOM overhead
- фиксированная стоимость кадра при стабильной сложности сцены
- предсказуемое потребление памяти
Ограничения:
- высокая стоимость сложных масок
- невозможность частичного обновления сцены
- рост CPU-нагрузки при сложной геометрии
Масштабирование нагрузки
Canvas лучше переносит:
- большое количество слоев
- частые трансформации
- анимации с высокой частотой кадров
Однако при усложнении графики нагрузка становится линейно зависимой
от числа операций рисования.
HTML (DOM)-рендерер
HTML-режим преобразует анимацию в набор HTML-элементов, используя
div, span и CSS-трансформации.
Принцип работы
Каждый слой становится DOM-элементом с:
- CSS
transform
opacity
clip-path (в ограниченных случаях)
Анимация управляется через изменение inline-стилей.
Производственные
характеристики
HTML-рендерер опирается на CSSOM и compositor layer браузера.
Преимущества:
- эффективная GPU-композиция при правильной оптимизации
- быстрые трансформации (
translate, scale,
rotate)
- хорошая интеграция с layout системы страницы
Недостатки:
- высокая стоимость при большом количестве DOM-узлов
- деградация при сложных clip-path и фильтрах
- нестабильное поведение при глубокой вложенности
Поведение в сложных сценах
При увеличении количества элементов:
- растёт нагрузка на layout engine
- увеличивается время style recalculation
- возможны layout thrashing эффекты
Сравнение по метрикам
производительности
Количество элементов
SVG:
- критическая деградация при тысячах узлов
- зависимость от глубины дерева
Canvas:
- слабая зависимость от количества объектов
- основная нагрузка — операции рисования
HTML:
- чувствителен к количеству DOM-узлов
- деградация при сложной структуре страницы
Использование CPU
SVG:
- высокий CPU из-за DOM-операций и layout recalculation
Canvas:
- средний/высокий CPU при сложной геометрии
- стабильная нагрузка
HTML:
- переменный CPU, зависящий от CSS recalculation и compositor
активности
Использование памяти
SVG:
- высокий расход из-за DOM-структуры и атрибутов
Canvas:
- умеренный расход, в основном bitmap buffer
HTML:
- высокий расход при большом количестве элементов
GPU-ускорение
SVG:
- ограниченное, зависит от браузера
Canvas:
- частичное через compositing layers
HTML:
- наиболее эффективно использует GPU при transform-only анимациях
Поведение при сложных
эффектах
Маски и клиппинг
SVG:
- нативная поддержка
- высокая стоимость пересчёта
Canvas:
- эмуляция через offscreen buffers
- значительная CPU нагрузка
HTML:
- clip-path дорог в пересчёте
- ухудшение при анимации масок
Градиенты и фильтры
SVG:
- высокая точность
- высокая стоимость repaint
Canvas:
- ограниченная поддержка без дополнительных вычислений
- часто требует ручной растеризации
HTML:
- фильтры через CSS могут быть GPU-ускорены
- деградация при сложных цепочках
Сценарии оптимального
применения
SVG-рендерер показывает лучшие результаты при:
- небольшом количестве элементов
- высокой детализации векторной графики
- необходимости точного соответствия After Effects
Canvas-рендерер эффективен при:
- сложных сценах с большим количеством объектов
- анимациях с высокой частотой кадров
- необходимости стабильной производительности
HTML-рендерер подходит для:
- интеграции анимаций в UI-интерфейсы
- простых трансформационных анимаций
- случаев, где важна GPU-композиция и взаимодействие с DOM
Поведенческие
различия при увеличении FPS
SVG:
- FPS падает нелинейно при росте сложности сцены
- основное ограничение — layout pipeline
Canvas:
- FPS зависит от числа draw calls
- более предсказуемая деградация
HTML:
- FPS зависит от количества compositor layers
- возможны резкие скачки при recalculation styles
Итоговые различия
архитектурных подходов
SVG-рендеринг ориентирован на точность и структуру DOM-дерева.
Canvas-рендеринг ориентирован на вычислительную стабильность и
независимость от DOM.
HTML-рендеринг ориентирован на интеграцию с интерфейсом и
использование возможностей CSS-композиции.