Автор Денис Гавриляк
Swift проти Flutter: RAM, CPU і що насправді кажуть вимірювання
Flutter компілюється в нативний ARM, і рецензоване тестування визнало його найлегшим кросплатформним фреймворком — але він усе одно тягне власний рушій. Цифри з джерелами і те, де розрив справжній.

Якщо коротко
- За швидкістю Flutter близький до нативного. Його код компілюється заздалегідь, тож ваша логіка виконується як машинний код. У найретельнішому незалежному дослідженні, яке ми знайшли, Flutter додав найменше накладних витрат серед усіх протестованих кросплатформних фреймворків
- За пам’яттю — ні. Одне прокручування списку додало 9,74 МБ у Swift проти 25,33 МБ у Flutter — приблизно на 62% менше. Це один тест із трьох прогонів, і він вимірює приріст, а не загальне споживання
- Розрив структурний. Flutter увесь час тримає в пам’яті власний рушій і потребує запасу, щоб прибирати за собою. Swift звільняє пам’ять тієї ж миті, коли вона перестає бути потрібною
- Мінімальний застосунок на Flutter важить 10,9 МБ при завантаженні ще до того, як ви напишете рядок коду, і близько 4 МБ з них — рушій
- Слабке місце Flutter — це стелі, а не швидкість. Віджети на домашньому екрані працюють під обмеженням, замалим для вбудованого рушія, тож ваші віджети в будь-якому разі будуть на Swift
- Пам’ять вирішує, чи переживе ваш застосунок сеанс. iPhone не сповільнює важкий застосунок — він його вимикає, і ваш клієнт бачить порожній кошик, а не збій
- Одна цифра без сценарію навантаження не каже нічого. Споживання процесора самим Flutter подвоїлося між прокручуванням списку й роботою камери — в одному й тому ж дослідженні
Ми запускаємо продукти і на нативному Swift, і на Flutter. Тож тут порівняні компроміси, які ми самі супроводжуємо в продакшені. Це не аргумент на користь котрогось із них.
Чи такий ефективний Flutter, як нативний Swift?
За CPU — достатньо близький, щоб більшість застосунків цього так і не помітила: Dart компілюється в нативний ARM заздалегідь, а рецензоване тестування визнало Flutter найлегшим серед кросплатформних фреймворків. За пам’яттю — ні: Flutter тримає резидентний рушій і купу зі збиранням сміття, тоді як підрахунок посилань у Swift звільняє пам’ять тієї ж миті, коли вона перестає використовуватися, і без жодного запасу.
Нижче — усі цифри, які ми знайшли із зазначеним пристроєм, версією фреймворку та інструментом вимірювання. Ми також позначаємо, яким із широко цитованих чисел цього бракує, — і тому тут вони не використані.
Спершу одне визначення, бо його часто розмивають. Під «нативним Swift» ми маємо на увазі Swift разом з UIKit або SwiftUI. Ці два теж не однакові за обсягом пам’яті. Але обидва працюють під ARC, і жоден не тягне за собою другого середовища виконання. Саме на цьому другому середовищі виконання й тримається все порівняння.
Чого насправді коштує вам ця цифра пам’яті?
Коли пам’яті бракує, iPhone не сповільнює застосунок — він його вимикає, починаючи з найважчого. Ваш клієнт не бачить збою. Він на двадцять секунд перемикається на інший застосунок, повертається — і бачить порожній кошик та екран входу. Це найменш усвідомлена ціна важчого застосунку, і у ваших звітах про збої вона не з’являється ніколи.
Ми розібрали це окремо — разом зі стелею для віджетів, через яку деякі функції взагалі неможливо зробити: Чому iPhone закриває важкі застосунки першими.
Усі цифри, які ми змогли перевірити, в одній таблиці
Чотири речі, про які питають найчастіше: пам’ять, споживання процесора, розмір завантаження і те, як швидко застосунок відкривається. Ось що для кожної з них справді виміряно, а що ні.
Перш ніж брати будь-який рядок, прочитайте правий стовпець. І прочитайте рядки, де написано цього ніхто не публікував, — бо їх більше, ніж визнає будь-хто, хто продає вам фреймворк.
Один застосунок із картками, зібраний обома способами й запущений на iPhone, — єдиний публічний тест, який ставить нативний Swift поруч із Flutter. Він охоплює пам’ять. Для трьох інших питань такого тесту не опубліковано.
| Що вимірювали | Нативний Swift | Flutter | Хто вимірював і на чому |
|---|---|---|---|
| Пам’ять — єдине питання, на яке є справжня відповідь | |||
| Додаткова пам’ять, яку застосунок узяв під час прокручування довгого списку | 9,74 МБ | 25,33 МБ | SynergyBoat, серпень 2025. Той самий застосунок, зібраний обома способами, iPhone 16 Plus, по три прогони на кожен |
| Та сама цифра поруч зі Swift | базовий рівень | у 2,6× більше | Порахували з рядка вище — Swift використав приблизно на 62% менше пам’яті |
| Наскільки результат коливався між прогонами | ± 0,18 | ± 0,47 | Той самий тест. Обидва показники стабільні — саме тому це порівняння взагалі варте цитування |
| Пам’ять проти нативного застосунку, на Android | Swift на Android немає | середній результат серед протестованих фреймворків | Oliveira та колеги, 2023 — єдине рецензоване дослідження тут. Android, а нативний застосунок для порівняння був написаний на Java. Це напрямок, а не цифра для iPhone |
| Старіші цифри для iPhone, які цитують і досі | 48 МБ | 117 МБ | inVerita, червень 2020, iPhone 6s — вимірювали ще до того, як Flutter замінив увесь свій рендерер. Наводимо, щоб ви впізнали ці числа, коли їх подаватимуть як актуальні |
| Споживання процесора — жоден тест на iPhone не містить Swift | |||
| iPhone, той самий застосунок, обома способами | цього ніхто не публікував | цього ніхто не публікував | Ми шукали ретельно й не знайшли жодного |
| Flutter, виміряний проти самого себе, на iPhone | не входить | 9,33% на iPhone 16 Pro, 13,72% на iPhone 11 | Власна панель Flutter у реальному часі. Корисна, щоб стежити за Flutter у часі, але Swift-застосунку в ній немає, а рахують там так, що з вашим власним виміром це не збіжиться |
| Розмір завантаження — те, на що чекає ваш клієнт | |||
| Найпростіший застосунок, як він завантажується на iPhone | цього ніхто не публікував | 10,9 МБ | Власний FAQ Flutter, вимір березня 2021 на порожньому застосунку. Apple не публікує зіставної цифри для Swift, тож поставити поруч чесне порівняння немає з чим |
| Машинерія, яку застосунок тягне з собою просто щоб працювати | жодної — він користується тим, що вже є в телефоні | близько 4 МБ рушія | FAQ Flutter. Це і є структурна різниця: Flutter приносить власний рендерер, Swift позичає системний |
| Як швидко застосунок відкривається — виміряно, але не опубліковано | |||
| Холодний старт на iPhone, той самий застосунок | цього ніхто не публікував | цього ніхто не публікував | Команда Flutter проганяє тест швидкості запуску Swift проти Flutter у власній системі збірки, але цифр не публікує. Один опенсорсний проєкт усе ж публікує швидкість запуску проти справжнього застосунку на Swift — ми його не переганяли, тож його чисел тут не наводимо |
Кожен рядок має джерело в розділі Джерела — з точним залізом, версіями та інструментами. Рядки з написом цього ніхто не публікував — це і є результат, а не прогалина, яку ми не змогли закрити.
Обрати Swift чи Flutter?
Ефективність — лише один із чинників, і рідко вирішальний. Чесний компроміс такий: нативний Swift виграє у вимірюваннях, а нативна розробка дорожчає тієї ж миті, коли вам потрібен ще й Android — бо друга платформа в ціну не входить.
Що створювати і чого коштує кожна відповідь. Останній стовпець — саме той, який пропускають.
| Якщо це ваша ситуація | Створюйте це | Чому | Чого це вам коштує |
|---|---|---|---|
| Лише iPhone, Android не планується | Нативний Swift | Легший із двох у 2,6 раза, кожна можливість Apple з першого дня, нічого зайвого в завантаженні | Нічого зайвого. З однією платформою нативна розробка ще й дешевша — одна кодова база і жодного шару фреймворку між вами та багами |
| Обидві платформи, і ефективність — це і є продукт: фонове аудіо, камера, карти, ШІ на пристрої або клієнти зі старішими телефонами | Нативно на обох | Саме тут розрив у пам’яті перестає бути статистикою й починає вимикати ваш застосунок посеред сеансу | Чесно кажучи, дорога відповідь. Дві кодові бази: кожен екран роблять двічі. Дизайн, бекенд, продукт і тестування не дублюються, тож до подвійної ціни тут далеко — але шар застосунку справді подвоюється |
| Обидві платформи, звичайний контент, застосунок для бронювання чи магазину, бюджет обмежений | Flutter | Одна команда на обидві платформи — це справжня економія, а для застосунку, що показує списки й форми, розрив у пам’яті може так і не дійти до ваших клієнтів | Важчий застосунок. Закладіть у бюджет тестування на найстарішому телефоні, який ви підтримуєте, а не на найновішому — саме там це видно |
| Одна власна дизайн-система, однакова на обох платформах, багато анімації | Flutter | Flutter сам малює кожен піксель, тож нестандартний дизайн скрізь має однаковий вигляд замість боротьби з двома наборами нативних компонентів | Приблизно у 2,6× більший приріст пам’яті — ціна власного рендерера |
| Віджети або Live Activities важливі для продукту | Swift, хоч би що ви обрали ще | Вони працюють під стелею, надто низькою, щоб туди вмістився вбудований рушій | Насправді це не вибір. Плануйте Swift у команді від початку, а не дізнавайтеся про це запізно |
Обирайте нативний Swift, коли продукт передусім для iOS. Обирайте, коли віджети, Live Activities чи розширення справді важать. Обирайте, коли вам потрібна підтримка нових фреймворків Apple з першого дня. Обирайте, коли ваші користувачі сидять на старішому залізі з малим обсягом RAM.
Обирайте Flutter, коли вам потрібна одна дизайн-система, відмальована однаково на iOS та Android, коли інтерфейс намальований з нуля й насичений анімацією, і коли єдина кодова база з AOT-компільованою логікою варта базового рівня розміром із рушій. За CPU ви віддаєте зовсім небагато: так кажуть дані EASE, а це найретельніші дані з доступних.
Порівняння всіх трьох — у матеріалі Нативний Swift проти Flutter і React Native. Друга дуель — Swift проти React Native. А про те, чому розрив у пам’яті вирішує, чи переживе ваш застосунок сеанс, — у тексті Чому iPhone закриває важкі застосунки першими. Якщо вам радше потрібна відповідь для одного конкретного продукту, поговоріть з нами. Ми створюємо і так, і так, і нам немає чого вам у цьому виборі продавати.
Джерела
Кожна цифра вище походить з одного з них. У кожному записі названі умови, які роблять його придатним для цитування: пристрій, версії, інструмент, розмір вибірки. Число без них — не доказ.
Вимірювання
- SynergyBoat — «Flutter vs React Native vs Native: бенчмарк продуктивності 2025» (31 серпня 2025)Цифри ΔMemory. iPhone 16 Plus, N=3, приріст RSS на прокручуванні 100 елементів. Опубліковано самим вендором. Ми беремо звідти лише частину про пам’ять: порівняння часу кадру там міряє різні величини щодо одного бюджету.
- Oliveira, Moraes, Castor & Fernandes — «Аналіз накладних витрат на ресурси у фреймворках для розробки мобільних застосунків» (EASE 2023)Рецензоване. Samsung Galaxy S20 FE, Android 12,
adb batterystats+meminfo, 45 прогонів на бенчмарк, з яких перші 15 відкинуто. Flutter 3.0.3 (Skia), React Native 0.68.2 (Hermes вимкнено), проти нативної Java. Без iOS і без Swift. Відкритий PDF через Утрехтський університет; DOI 10.1145/3593434.3593487. - Tollin & Lidekrans — «React Native vs. Flutter: порівняння продуктивності» (Лінчепінзький університет, 2023)Лише Android. Flutter 3.10.0 проти React Native 0.71.6,
adb shell top, п’ять 30-секундних прогонів. Гілки зі Swift немає. У розділі обговорення пояснено розрив у тесті з камерою, який більшість цитувань оминає. - Панель продуктивності Flutter DeviceLabПоказники RAM і CPU у реальному часі, на кожен коміт, зі справжнього заліза iPhone 11 та iPhone 16 Pro. Лише Flutter. CPU тут — відсоток по всіх ядрах, а не за конвенцією Xcode Instruments. Посилання є в документації Flutter про метрики продуктивності.
- Нотатки до релізу Flutter 3.22 (14 травня 2024)Першоджерело, з назвами пристроїв: час CPU і GPU на розмиття «майже вдвічі» менший на iPhone 11; растеризація Lottie з 64 ms/кадр до «майже в 10x швидше»; споживання GPU для platform view на iOS — на 50% менше.
Документація першоджерел
- Apple — «Глибоке занурення в пам’ять iOS», сесія 416 на WWDC18Визначає обсяг пам’яті застосунку як dirty-сторінки плюс стиснені, пораховані по 16 КБ на сторінку. Стверджує, що ліміт залежить від пристрою, і жодного числа не публікує.
- Apple — «Профілюйте та оптимізуйте пам’ять своєї гри», сесія 10106 на WWDC22Джерело твердження, що на Apple silicon використані ресурси Metal рахуються як dirty-пам’ять, бо CPU і GPU мають спільний пул.
- Apple — «Виявлення високого споживання пам’яті за звітами подій jetsam»Розібраний приклад, який ми цитуємо: 92 802 сторінки × 16 384 байти = 1,52 ГБ у використанні на момент завершення через
per-process-limit. Це споживання в момент смерті, а не опублікована стеля. - Apple Developer Forums —
EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB)Логи збоїв WidgetKit, про які повідомляли розробники, а не специфікація Apple. Джерело стелі віджетів у ~30 МБ. - Flutter FAQ — «Наскільки великий рушій Flutter?»Розміри мінімального застосунку: ~4,8 МБ завантаження для ARM64 Android, 10,9 МБ завантаження для iOS, з них ~4 МБ — рушій. Виміряно в березні 2021, без Material Components,
--split-per-abi. - Flutter — рушій рендерингу ImpellerПідтверджує, що Impeller — єдиний рендерер на iOS і що він компілює шейдери заздалегідь, під час збірки.
- Flutter — «Не бійтеся збирача сміття» (Matt Sullivan, 2019)Опис поколіннєвого GC: scavenger для молодої області, паралельний mark-sweep, idle-хуки рушія.
Опенсорс, який ви можете прогнати самі
- Вихідний код бенчмарка SynergyBoatУсі чотири реалізації — Swift, Flutter, React Native, Kotlin — разом з інструментуванням. Клонуйте і переганяйте самі.
- Пакет для відтворення EASE 2023Усі сирі дампи
adb, що стоять за статтею. Можна переганяти. - jacobras/flutter-vs-native-vs-kmpОдин застосунок у чотирьох стеках, серед них — нативна база на Swift/SwiftUI. Публікує лише розмір застосунку та час запуску, без RAM і CPU. Заархівовано в серпні 2026.
- flutter/flutter —
imitation_game_swiftuiтаimitation_game_flutterВласне порівняння SwiftUI проти Flutter від команди Flutter, що виконується в iOS CI. Міряє час компіляції, розмір і час до першого кадру. Без RAM і CPU, і жодних цифр воно не публікує.
Джерела, які ми перевірили й не використали
- inVerita — «Глибоке порівняння продуктивності» (червень 2020)Звідси походять цифри «48 МБ / 117 МБ / 135 МБ». iPhone 6s та iPad Mini 3 2014 року, ще до Hermes, Impeller і New Architecture. Посилаємося, щоб твердження можна було перевірити, а не як на рекомендацію.
- inVerita — «Дослідження продуктивності» (березень 2020)Мікробенчмарки з обчисленням знаків числа пі, на яких тримається теза «Flutter на 15% швидший за Swift». Міряють арифметику в циклі, на iPhone 6s.
- Biørn-Hansen, Rieger, Grønli, Majchrzak & Ghinea — «Емпіричне дослідження накладних витрат продуктивності в кросплатформних фреймворках мобільної розробки» (Empirical Software Engineering, 2020)Одне з кількох ранніших рецензованих досліджень із нативною базою. Наводимо його, бо воно спростовує будь-яке твердження, що EASE 2023 — єдине таке.
Схожі статті
- Нативний Swift проти Flutter і React Native: RAM, CPU і справжня ефективністьРозробка
- Swift проти React Native: RAM, CPU і ціна двох рантаймівРозробка
- Нативна розробка на Swift і Kotlin у Валенсії, ІспаніяАгенції
