Зміст
Коротко
У випуску React Status #495 перша тема — не черговий реліз, а стенд. Den Odell прогнав десять популярних дизайн-систем під навантаженням: список із 249 країн і «позначити все» на 100 прапорцях, у Chrome з процесором, сповільненим у 4 рази.
Відкриття випадального списку: Mantine — 84 мс, Ant Design — 134 мс, MUI і React Spectrum — понад 200 мс і заморозка інтерфейсу за порогом 100 мс. У Spectrum причина в React Aria: опції міряють по одній і щоразу змушують браузер перерахувати верстку. Зауваження вже відкрито, виправлення на перевірці. Тести на Playwright лежать на GitHub.
Що сталося
Уявіть спільний ліфт в офісі. Команди продуктів оздоблюють свої поверхи, але якщо кабіна довго відчиняє двері, жодна поліровка поверху цього не врятує. Дизайн-система — саме така кабіна: будь-який екран поверх неї успадковує її затримки.
Odell узяв десять активно розвиваних бібліотек жовтня 2026: серед React — Mantine, Ant Design, Material UI, React Spectrum; поруч — вебкомпоненти на Lit, FAST, Stencil (Ionic) та інші. Замір: скільки головний потік зайнятий після кліку (медіана з трьох прогонів), плюс найдовша пауза інтерфейсу. Бюджет чуйності він поставив поруч із доступністю: 100 мс.
Відкриття списку країн на CPU×4 (від швидких до повільних за React Status і статтею):
| Система | Відкриття | Довга пауза інтерфейсу |
|---|---|---|
Mantine |
84 мс | 63 мс |
Ant Design |
134 мс | 69 мс |
MUI |
208 мс | 181 мс |
React Spectrum |
227 мс | 162 мс |
Ionic |
1266 мс | 1133 мс |
Fluent і Carbon відкривалися ще швидше (~60 мс). Той самий Ionic, що «вбив» список, на 100 прапорцях виявився швидким — а MUI вклався в 70 мс проти 421 мс у Ant Design. Фреймворк сам по собі результат не вирішив: два набори на Lit розійшлися вдвічі, той самий стек міг бути повільним в одному сценарії й прийнятним в іншому.
У Spectrum список віртуалізовано, але час майже не падав при половині опцій. У профілі зверху — checkVisibility із React Aria: для кожної видимої опції скидання висоти й читання розміру → перерахунок верстки знову й знову. Odell запропонував спочатку скинути висоти, потім один раз виміряти; зауваження відкрито, правку на перевірці.
У тому ж випуску коротко: TanStack Redact — легша підміна React/React DOM у браузері з синхронним рендером без нарізання часу; TanStack DB 1.0 (кандидат RC1) — стабільний за API клієнтський шар даних із керівництвом переходу. Це тло тижня; головна тема — стенд по дизайн-системах.
Чому це важливо
Команди продуктів часто відчувають «гальмує форма», але лагодити спільний Select із чужого пакета майже неможливо. Розмір бандла в безперервній інтеграції ловлять частіше, ніж реакцію на клік — а користувач чекає саме клік. Odell прямо ставить продуктивність поруч із доступністю в пріоритетах команди дизайн-системи.
Цифри корисні як карта ризиків, не як рейтинг «хто гірший». MUI повільніше відкриває довгий список (малює всі ~250 вузлів), зато швидше масово позначає прапорці. Ant Design швидше відкривається завдяки віртуалізації, але дорожче на анімаціях прапорців. Вибір бібліотеки без сценарію навантаження — як вибір ліфта за кольором кабіни.
Розбір Spectrum показує: вузьке місце може сидіти не в «React повільний», а в конкретному циклі вимірювань у спільній бібліотеці доступності. Одне зауваження в React Aria лагодить клас застосунків одразу: як ремонт мотора кабіни для всієї будівлі.
На практиці
Стенд чужий — орієнтир. Повторюваний тест на своїх компонентах важливіший за чужу таблицю.
- Візьміть репозиторій
denodell/design-system-performance-testsна GitHub і проженітьPlaywrightна своємуSelect/ списку прапорців із CPU×4. - Зафіксуйте поріг: відкриття довгого списку й масова дія не повинні тримати головний потік довше 100 мс без явного рішення команди.
- У профілі Chrome дивіться не лише виконання скриптів, а й розрахунок стилів із версткою: серії читань розмірів після запису стилів — класичний перерахунок макета.
- Довгі списки — віртуалізація і доступність (прихована копія виділеної опції, як у
Ant Design), а не лише «нарізати DOM». - Не зводьте «продуктивність дизайн-системи» до розміру бандла: окремо ловіть час до інтерактивності після кліку.
- Перед зміною
MUI↔Ant Design↔Mantineпроженіть обидва сценарії на своїх даних — таблиціOdellпоказують, що переможець залежить від задачі. - Якщо тягнете
Spectrum/React Aria, стежте за зауваженням про вимірювання опцій; не копіюйте той самий цикл у свій код.
Підсумок
Дизайн-система під реальним навантаженням поводиться як спільний ліфт: гальма кабіни відчуває кожен поверх. Стенд Odell на CPU×4 показує розкид від десятків до тисяч мілісекунд і конкретний баг вимірювань у React Aria — з тестами, які можна повісити на свій код.
У React Status #495 поруч мелькають Redact і TanStack DB (кандидат RC1), але для фронтенду тижня головний урок простий: міряйте клік, а не лише кілобайти.



Коментарі