Анимации в формате Lottie представляют собой описания сцен в виде JSON-структуры, содержащей ключевые кадры, кривые интерполяции, слои, маски, эффекты и наборы векторных данных. При использовании в браузере этот JSON загружается, парсится и преобразуется в набор WebGL или Canvas-инструкций через Lottie Web.
Каждый лишний килобайт в таком файле напрямую влияет на:
В отличие от изображений, Lottie-файлы не декодируются нативным кодеком — вся работа выполняется JavaScript-движком, поэтому избыточность данных становится особенно критичной.
Lottie JSON содержит несколько крупных блоков:
layers — слои композицииassets — внешние ресурсы и прекомпозицииshapes — векторные формыks — keyframes (анимационные данные)ip / op / st — таймлайн слояa / p / s / r — трансформации (anchor, position, scale,
rotation)Каждый из этих блоков может содержать глубоко вложенные структуры, где часто повторяются однотипные числовые данные.
Например, типичная анимация круга может содержать сотни повторяющихся значений кривых Безье, хотя визуально это один простой элемент.
Минификация JSON в контексте Lottie Web — это не только удаление пробелов, а комплексная оптимизация структуры данных:
Важно учитывать, что Lottie Web не интерпретирует семантику JSON — он просто читает структуру, поэтому любые оптимизации должны сохранять полную совместимость.
Первый уровень оптимизации — стандартная минификация JSON:
Пример до:
{
"v": "5.7.4",
"fr": 60,
"ip": 0,
"op": 120
}
После:
{"v":"5.7.4","fr":60,"ip":0,"op":120}
В Lottie это даёт ощутимый эффект, особенно при больших композициях, но является лишь начальной стадией оптимизации.
Одним из главных источников раздувания Lottie JSON являются числа с высокой точностью:
"p": { "x": 120.0000001, "y": 300.0000009 }
Такая точность избыточна для браузерной анимации.
Практика оптимизации:
Пример:
"p": { "x": 120, "y": 300 }
или
"p": { "x": 120.01, "y": 300.02 }
В сложных сценах это может уменьшить размер файла на десятки процентов.
Экспорт из After Effects через Bodymovin часто включает поля, которые не влияют на финальный рендер:
e (end keyframe easing)assetsПример избыточной структуры:
"o": { "a": 0, "k": 100, "ix": 11 }
Если значение статическое, можно упростить:
"o": 100
Такая трансформация требует понимания семантики Lottie, но даёт существенное сокращение объёма.
Keyframes — один из самых тяжёлых элементов Lottie JSON.
Типичные проблемы:
Пример избыточных keyframes:
"k": [
{ "t": 0, "s": [0, 0] },
{ "t": 1, "s": [0.1, 0.1] },
{ "t": 2, "s": [0.2, 0.2] }
]
После оптимизации:
"k": [
{ "t": 0, "s": [0, 0] },
{ "t": 2, "s": [0.2, 0.2] }
]
Lottie Web интерполирует значения самостоятельно, поэтому промежуточные точки часто избыточны.
Кривые анимации (cubic bezier) могут содержать множество
контрольных точек:
"o": { "x": [0.333, 0.333], "y": [0, 0] }
В ряде случаев можно заменить сложные кривые на стандартные easing-функции, если визуально поведение не меняется.
Это уменьшает:
Поле assets часто содержит:
Очистка выполняется через анализ layers и проверку
ссылок refId.
Пример проблемы:
"assets": [
{ "id": "image_0", "w": 512, "h": 512, "p": "img.png" },
{ "id": "image_1", "w": 512, "h": 512, "p": "unused.png" }
]
Если image_1 нигде не используется, его удаление
уменьшает размер без последствий.
Lottie JSON часто содержит длинные идентификаторы:
image_000000123layer_background_gradient_mainИх можно сокращать при условии сохранения ссылочной целостности:
"id": "a1"
или
"id": "l3"
Важно, чтобы все ссылки внутри layers и
assets оставались согласованными.
После структурной минификации JSON дополнительно проходит сетевое сжатие:
Lottie JSON особенно хорошо сжимается из-за:
Однако эффективность компрессии зависит от предварительной минификации: плохо оптимизированный JSON хуже сжимается алгоритмами общего назначения.
Lottie Web выполняет несколько критических операций:
Минификация влияет на:
JSON.parse (меньший текст — быстрее
разбор)Особенно заметен эффект на мобильных устройствах, где парсинг JSON становится узким местом.
В экосистеме используются разные подходы:
Типичный pipeline:
Некорректная оптимизация может привести к:
Особенно опасны автоматические скрипты, которые не учитывают семантику Lottie, а работают только на уровне JSON-структуры.
Минификация Lottie JSON всегда требует компромисса между:
Избыточная агрессивная оптимизация может привести к визуальным артефактам, тогда как слабая — к тяжёлым анимациям, которые плохо работают в интерфейсе.