Перейти до вмісту
← Блог
Розробка

Автор Денис Гавриляк

Swift проти Flutter: RAM, CPU і що насправді кажуть вимірювання

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

Стовпчикова діаграма приросту пам’яті під час прокручування списку зі 100 елементів на iPhone 16 Plus: нативний Swift — 9.74 МБ проти Flutter — 25.33 МБ

Якщо коротко

  • За швидкістю 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 звільняє пам’ять тієї ж миті, коли вона перестає використовуватися, і без жодного запасу.

на 62% меншеПриріст пам’яті, Swift проти Flutter — 9,74 МБ проти 25,33 МБSynergyBoat, iPhone 16 Plus, N=3, серпень 2025. Приріст RSS на прокручуванні 100 елементів — дельта, а не повний обсяг.
43,4% → 81,6%CPU у Flutter: прокручування списку проти екрана камериЛінчепінзький університет, 2023. Android, Flutter 3.10.0, 5 прогонів × 30 с. Той самий фреймворк, інше навантаження.
10,9 МБМінімальний застосунок на Flutter, завантаження під iOSFlutter FAQ, березень 2021, без Material Components. ~4 МБ із них — базовий рушій.
~30 МБСтеля WidgetKit — у будь-якому разі SwiftЛоги збоїв EXC_RESOURCE, про які повідомляли розробники.

Нижче — усі цифри, які ми знайшли із зазначеним пристроєм, версією фреймворку та інструментом вимірювання. Ми також позначаємо, яким із широко цитованих чисел цього бракує, — і тому тут вони не використані.

Спершу одне визначення, бо його часто розмивають. Під «нативним Swift» ми маємо на увазі Swift разом з UIKit або SwiftUI. Ці два теж не однакові за обсягом пам’яті. Але обидва працюють під ARC, і жоден не тягне за собою другого середовища виконання. Саме на цьому другому середовищі виконання й тримається все порівняння.

Чого насправді коштує вам ця цифра пам’яті?

Коли пам’яті бракує, iPhone не сповільнює застосунок — він його вимикає, починаючи з найважчого. Ваш клієнт не бачить збою. Він на двадцять секунд перемикається на інший застосунок, повертається — і бачить порожній кошик та екран входу. Це найменш усвідомлена ціна важчого застосунку, і у ваших звітах про збої вона не з’являється ніколи.

Ми розібрали це окремо — разом зі стелею для віджетів, через яку деякі функції взагалі неможливо зробити: Чому iPhone закриває важкі застосунки першими.

Усі цифри, які ми змогли перевірити, в одній таблиці

Чотири речі, про які питають найчастіше: пам’ять, споживання процесора, розмір завантаження і те, як швидко застосунок відкривається. Ось що для кожної з них справді виміряно, а що ні.

Перш ніж брати будь-який рядок, прочитайте правий стовпець. І прочитайте рядки, де написано цього ніхто не публікував, — бо їх більше, ніж визнає будь-хто, хто продає вам фреймворк.

Один застосунок із картками, зібраний обома способами й запущений на iPhone, — єдиний публічний тест, який ставить нативний Swift поруч із Flutter. Він охоплює пам’ять. Для трьох інших питань такого тесту не опубліковано.

Що вимірювалиНативний SwiftFlutterХто вимірював і на чому
Пам’ять — єдине питання, на яке є справжня відповідь
Додаткова пам’ять, яку застосунок узяв під час прокручування довгого списку9,74 МБ25,33 МБSynergyBoat, серпень 2025. Той самий застосунок, зібраний обома способами, iPhone 16 Plus, по три прогони на кожен
Та сама цифра поруч зі Swiftбазовий рівеньу 2,6× більшеПорахували з рядка вище — Swift використав приблизно на 62% менше пам’яті
Наскільки результат коливався між прогонами± 0,18± 0,47Той самий тест. Обидва показники стабільні — саме тому це порівняння взагалі варте цитування
Пам’ять проти нативного застосунку, на AndroidSwift на 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Одна команда на обидві платформи — це справжня економія, а для застосунку, що показує списки й форми, розрив у пам’яті може так і не дійти до ваших клієнтівВажчий застосунок. Закладіть у бюджет тестування на найстарішому телефоні, який ви підтримуєте, а не на найновішому — саме там це видно
Одна власна дизайн-система, однакова на обох платформах, багато анімаціїFlutterFlutter сам малює кожен піксель, тож нестандартний дизайн скрізь має однаковий вигляд замість боротьби з двома наборами нативних компонентівПриблизно у 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 закриває важкі застосунки першими. Якщо вам радше потрібна відповідь для одного конкретного продукту, поговоріть з нами. Ми створюємо і так, і так, і нам немає чого вам у цьому виборі продавати.

Джерела

Кожна цифра вище походить з одного з них. У кожному записі названі умови, які роблять його придатним для цитування: пристрій, версії, інструмент, розмір вибірки. Число без них — не доказ.

Вимірювання

  1. SynergyBoat — «Flutter vs React Native vs Native: бенчмарк продуктивності 2025» (31 серпня 2025)Цифри ΔMemory. iPhone 16 Plus, N=3, приріст RSS на прокручуванні 100 елементів. Опубліковано самим вендором. Ми беремо звідти лише частину про пам’ять: порівняння часу кадру там міряє різні величини щодо одного бюджету.
  2. 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.
  3. Tollin & Lidekrans — «React Native vs. Flutter: порівняння продуктивності» (Лінчепінзький університет, 2023)Лише Android. Flutter 3.10.0 проти React Native 0.71.6, adb shell top, п’ять 30-секундних прогонів. Гілки зі Swift немає. У розділі обговорення пояснено розрив у тесті з камерою, який більшість цитувань оминає.
  4. Панель продуктивності Flutter DeviceLabПоказники RAM і CPU у реальному часі, на кожен коміт, зі справжнього заліза iPhone 11 та iPhone 16 Pro. Лише Flutter. CPU тут — відсоток по всіх ядрах, а не за конвенцією Xcode Instruments. Посилання є в документації Flutter про метрики продуктивності.
  5. Нотатки до релізу Flutter 3.22 (14 травня 2024)Першоджерело, з назвами пристроїв: час CPU і GPU на розмиття «майже вдвічі» менший на iPhone 11; растеризація Lottie з 64 ms/кадр до «майже в 10x швидше»; споживання GPU для platform view на iOS — на 50% менше.

Документація першоджерел

  1. Apple — «Глибоке занурення в пам’ять iOS», сесія 416 на WWDC18Визначає обсяг пам’яті застосунку як dirty-сторінки плюс стиснені, пораховані по 16 КБ на сторінку. Стверджує, що ліміт залежить від пристрою, і жодного числа не публікує.
  2. Apple — «Профілюйте та оптимізуйте пам’ять своєї гри», сесія 10106 на WWDC22Джерело твердження, що на Apple silicon використані ресурси Metal рахуються як dirty-пам’ять, бо CPU і GPU мають спільний пул.
  3. Apple — «Виявлення високого споживання пам’яті за звітами подій jetsam»Розібраний приклад, який ми цитуємо: 92 802 сторінки × 16 384 байти = 1,52 ГБ у використанні на момент завершення через per-process-limit. Це споживання в момент смерті, а не опублікована стеля.
  4. Apple Developer Forums — EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=30 MB)Логи збоїв WidgetKit, про які повідомляли розробники, а не специфікація Apple. Джерело стелі віджетів у ~30 МБ.
  5. Flutter FAQ — «Наскільки великий рушій Flutter?»Розміри мінімального застосунку: ~4,8 МБ завантаження для ARM64 Android, 10,9 МБ завантаження для iOS, з них ~4 МБ — рушій. Виміряно в березні 2021, без Material Components, --split-per-abi.
  6. Flutter — рушій рендерингу ImpellerПідтверджує, що Impeller — єдиний рендерер на iOS і що він компілює шейдери заздалегідь, під час збірки.
  7. Flutter — «Не бійтеся збирача сміття» (Matt Sullivan, 2019)Опис поколіннєвого GC: scavenger для молодої області, паралельний mark-sweep, idle-хуки рушія.

Опенсорс, який ви можете прогнати самі

  1. Вихідний код бенчмарка SynergyBoatУсі чотири реалізації — Swift, Flutter, React Native, Kotlin — разом з інструментуванням. Клонуйте і переганяйте самі.
  2. Пакет для відтворення EASE 2023Усі сирі дампи adb, що стоять за статтею. Можна переганяти.
  3. jacobras/flutter-vs-native-vs-kmpОдин застосунок у чотирьох стеках, серед них — нативна база на Swift/SwiftUI. Публікує лише розмір застосунку та час запуску, без RAM і CPU. Заархівовано в серпні 2026.
  4. flutter/flutter — imitation_game_swiftui та imitation_game_flutterВласне порівняння SwiftUI проти Flutter від команди Flutter, що виконується в iOS CI. Міряє час компіляції, розмір і час до першого кадру. Без RAM і CPU, і жодних цифр воно не публікує.

Джерела, які ми перевірили й не використали

  1. inVerita — «Глибоке порівняння продуктивності» (червень 2020)Звідси походять цифри «48 МБ / 117 МБ / 135 МБ». iPhone 6s та iPad Mini 3 2014 року, ще до Hermes, Impeller і New Architecture. Посилаємося, щоб твердження можна було перевірити, а не як на рекомендацію.
  2. inVerita — «Дослідження продуктивності» (березень 2020)Мікробенчмарки з обчисленням знаків числа пі, на яких тримається теза «Flutter на 15% швидший за Swift». Міряють арифметику в циклі, на iPhone 6s.
  3. Biørn-Hansen, Rieger, Grønli, Majchrzak & Ghinea — «Емпіричне дослідження накладних витрат продуктивності в кросплатформних фреймворках мобільної розробки» (Empirical Software Engineering, 2020)Одне з кількох ранніших рецензованих досліджень із нативною базою. Наводимо його, бо воно спростовує будь-яке твердження, що EASE 2023 — єдине таке.

Схожі статті

Працювати з Applefy
Поговорімо

Забронюйте дзвінок з нашим CEO

Портрет Дениса Гавриляка, засновника та CEO Applefy

Денис Гавриляк

Засновник і CEO

  • 10+ років у розробці програмного забезпечення
  • Магістр із кібербезпеки
  • Глибоке й актуальне знання інструментів ШІ

Ви говоритимете з людиною, яка сама створює продукт. Денис особисто працює над продуктом, архітектурою та випуском — і уважно стежить за тим, на що інструменти ШІ справді здатні в реальному продукті, а не лише в демо.