24-06-2026, 20:30
Привіт, колеги! В епоху динамічних інтерфейсів (Awwwards-стайл) анімації є всюди. Але яке реальне навантаження вони створюють на пристрій користувача? Я проаналізував кілька десятків технічних матеріалів (з web.dev, MDN, блогів розробників браузерів), щоб раз і назавжди розібратися у вічній суперечці: CSS проти JS, та CPU проти GPU.
Ось реальні дані та цифри, які варто знати кожному верстальнику та фронтендеру.
1. Бюджет кадру: 16.6 мілісекунд
Щоб анімація виглядала плавною, вона має працювати на швидкості 60 FPS (кадрів на секунду). Це означає, що у браузера є лише 16.6 мс на підготовку одного кадру. Якщо браузер не встигає — кадри випадають, і користувач бачить 'jank' (смикання).
Рендеринг кадру проходить такі етапи: Style -> Layout (Reflow) -> Paint -> Composite.
Найважчі для процесора (CPU) етапи — це Layout (перерахунок геометрії всієї сторінки) та Paint (малювання пікселів).
2. Магія CSS: Апаратне прискорення (GPU)
Чому всі кажуть, що CSS-анімації швидші? Бо вони декларативні. Браузер заздалегідь знає, що буде відбуватися.
Але є нюанс! CSS буде швидким ТІЛЬКИ, якщо ви анімуєте властивості (translate, scale, rotate) та .
Дані: Якщо ви анімуєте `margin-left` на 100px, процесор змушений робити етап Layout 60 разів на секунду. Якщо ви використовуєте `transform: translateX(100px)`, браузер виносить цей елемент на окремий композитний шар (Composite Layer) і передає роботу відеокарті (GPU). GPU просто соває готову картинку. Навантаження на CPU при цьому падає майже до 0%.
3. JavaScript Анімації: Проблема Головного Потоку
Історично JS-анімації через `setInterval` були жахливими. Зараз використовується `requestAnimationFrame()`, який синхронізується з частотою оновлення монітора.
Головна проблема JS-анімацій в тому, що вони виконуються в Головному потоці (Main Thread).
Критичний факт: Якщо ваш сайт завантажує важкий React-додаток, парсить великий JSON або просто виконує складну бізнес-логіку — головний потік блокується. JS-анімація в цей момент просто завмре. Натомість CSS-анімація на GPU (через transform) продовжить плавно працювати навіть при намертво завислому JS!
4. Коли ж використовувати JS (GSAP)?
Попри навантаження на CPU, JS (наприклад, бібліотека GSAP) є незамінним для:
- Складної секвенції (таймлайни).
- Фізики (відскоки, інерція).
- Анімацій, що залежать від скролу (ScrollTrigger).
Сучасний GSAP під капотом змінює той самий `transform`, тому його продуктивність дуже близька до CSS, але з повним контролем над процесом.
Висновки та Best Practices:
- НІКОЛИ не анімуйте width, height, top, left, margin, padding. Це вбивство для бюджетних смартфонів.
- ЗАВЖДИ анімуйте `transform` та `opacity`.
- Використовуйте `will-change: transform;`, щоб підказати браузеру заздалегідь створити GPU-шар. Але обережно: кожен такий шар споживає оперативну пам'ять (VRAM).
- Для простих станів (hover, toggle) -> беріть CSS. Для складних таймлайнів -> JS (GSAP).
Хто стикався з жорсткими 'гальмами' анімацій на мобільних пристроях? Які властивості найбільше грузили ваш сайт?
Ось реальні дані та цифри, які варто знати кожному верстальнику та фронтендеру.
1. Бюджет кадру: 16.6 мілісекунд
Щоб анімація виглядала плавною, вона має працювати на швидкості 60 FPS (кадрів на секунду). Це означає, що у браузера є лише 16.6 мс на підготовку одного кадру. Якщо браузер не встигає — кадри випадають, і користувач бачить 'jank' (смикання).
Рендеринг кадру проходить такі етапи: Style -> Layout (Reflow) -> Paint -> Composite.
Найважчі для процесора (CPU) етапи — це Layout (перерахунок геометрії всієї сторінки) та Paint (малювання пікселів).
2. Магія CSS: Апаратне прискорення (GPU)
Чому всі кажуть, що CSS-анімації швидші? Бо вони декларативні. Браузер заздалегідь знає, що буде відбуватися.
Але є нюанс! CSS буде швидким ТІЛЬКИ, якщо ви анімуєте властивості
Код:
transformКод:
opacityДані: Якщо ви анімуєте `margin-left` на 100px, процесор змушений робити етап Layout 60 разів на секунду. Якщо ви використовуєте `transform: translateX(100px)`, браузер виносить цей елемент на окремий композитний шар (Composite Layer) і передає роботу відеокарті (GPU). GPU просто соває готову картинку. Навантаження на CPU при цьому падає майже до 0%.
3. JavaScript Анімації: Проблема Головного Потоку
Історично JS-анімації через `setInterval` були жахливими. Зараз використовується `requestAnimationFrame()`, який синхронізується з частотою оновлення монітора.
Головна проблема JS-анімацій в тому, що вони виконуються в Головному потоці (Main Thread).
Критичний факт: Якщо ваш сайт завантажує важкий React-додаток, парсить великий JSON або просто виконує складну бізнес-логіку — головний потік блокується. JS-анімація в цей момент просто завмре. Натомість CSS-анімація на GPU (через transform) продовжить плавно працювати навіть при намертво завислому JS!
4. Коли ж використовувати JS (GSAP)?
Попри навантаження на CPU, JS (наприклад, бібліотека GSAP) є незамінним для:
- Складної секвенції (таймлайни).
- Фізики (відскоки, інерція).
- Анімацій, що залежать від скролу (ScrollTrigger).
Сучасний GSAP під капотом змінює той самий `transform`, тому його продуктивність дуже близька до CSS, але з повним контролем над процесом.
Висновки та Best Practices:
- НІКОЛИ не анімуйте width, height, top, left, margin, padding. Це вбивство для бюджетних смартфонів.
- ЗАВЖДИ анімуйте `transform` та `opacity`.
- Використовуйте `will-change: transform;`, щоб підказати браузеру заздалегідь створити GPU-шар. Але обережно: кожен такий шар споживає оперативну пам'ять (VRAM).
- Для простих станів (hover, toggle) -> беріть CSS. Для складних таймлайнів -> JS (GSAP).
Хто стикався з жорсткими 'гальмами' анімацій на мобільних пристроях? Які властивості найбільше грузили ваш сайт?
Твій сайт заслуговує бути першим.


Займаюсь розробкою сайтів,