Flutter 2: Flutter vs native Swift/Kotlin — arxitektura va o'lchangan natijalar
💙 Flutter — Mobile (iOS, Android) & Desktop (macOS, Windows)
Flutter 2: Flutter vs native Swift/Kotlin — arxitektura va o'lchangan natijalar
Holat: 2026-yil sentabr. Krossplatforma tanlashda marketing shiorlariga emas, balki arxitektura va mustaqil o'lchov natijalariga tayanish lozim. Ushbu darsda Flutter, nativ iOS (Swift/SwiftUI), nativ Android (Kotlin/Compose), React Native va KMP platformalarining render qilish tamoyillari, Impeller evolyutsiyasi, Ilovan (2026) ilmiy benchmarki hamda freym va hajm o'lchash usullari ko'rsatiladi.
Mundarija
- Render arxitekturasi: kim qanday chizadi?
- Impeller evolyutsiyasi: Skia'dan to'liq voz kechish
- Ilmiy o'lchovlar: Ilovan (2026) benchmark natijalari
- Tadqiqot cheklovlari va boshqa ilmiy ishlar
- Freym byudjeti: 60 Hz va 120 Hz ProMotion
- O'lchov amaliyoti: integration_test va drayver
- Ilova hajmi (App Size) va uni tahlil qilish
- Qaror jadvali: qachon Native, qachon Flutter, qachon KMP?
- Xulosa
- Manbalar
1. Render arxitekturasi: kim qanday chizadi? {#rendering}
Dasturlash tizimlari ekranga piksellarni chiqarish bo'yicha tubdan farq qiladi:
| Mezon | Flutter | React Native (New Arch) | Kotlin Multiplatform (KMP) | Nativ iOS (SwiftUI) |
|---|---|---|---|---|
| Piksel chizuvchi | Impeller: Metal (iOS) yoki Vulkan (Android) orqali to'g'ridan-to'g'ri o'zi chizadi (Flutter Architecture) | OS nativ komponentlari: JSI va Fabric orqali tizim komponentlariga bog'lanadi | Nativ UI: SwiftUI va Jetpack Compose orqali tizim chizadi | CoreAnimation / Metal: Tizim optimallashtirilgan render zanjiri |
| UIKit integratsiyasi | Tizim UIKit tugmalarini ishlatmaydi; CupertinoButton toza Dart kodidir | Nativ UIButton / UIView yaratiladi | Nativ Button / View yaratiladi | Sof nativ View |
| Kompilyatsiya | Ishlab chiqarishda (Release) to'liq AOT, ishlab chiqishda (Debug) JIT + Hot Reload | Hermes dvigateli orqali JavaScript bytecode (AOT) | Nativ mashina kodi (LLVM orqali Kotlin/Native) | Swift mashina kodi (AOT) |
Flutter'ning o'z piksellarini o'zi chizishi unga barcha platformalarda (iOS, Android, macOS, Windows) 100% bir xil vizual ko'rinish beradi, ammo yangi iOS tizim effektlarini (masalan, Liquid Glass) darhol qabul qilishni qiyinlashtiradi.
2. Impeller evolyutsiyasi: Skia'dan to'liq voz kechish {#impeller}
Flutterning dastlabki yillaridagi eng katta muammo — Shader Compilation Jank (birinchi marta animatsiya ishga tushganda shaderlar runtime'da kompilyatsiya qilinishi oqibatida kadrlar tushib qolishi) edi (Flutter Shader Compilation).
Google bu muammoni ildizi bilan yo'qotish uchun yangi avlod Impeller dvigatelini yaratdi:
| Versiya | Sana | Impeller holati va o'zgarishlar |
|---|---|---|
| Flutter 3.10 | 2023-05-10 | iOS uchun Impeller sukut bo'yicha yoqildi (Metal API) |
| Flutter 3.24 | 2024-08-06 | Android uchun Vulkan sinovlari o'tkazildi, to'liq chiqarilish kechiktirildi |
| Flutter 3.27 | 2024-12-11 | Android uchun Impeller sukut bo'yicha yoqildi |
| Flutter 3.29 | 2025-02-12 | Android qurilmalarning 100% qismida faollashdi (OpenGL ES fallback bilan) |
| Flutter 3.47 | 2026-08-12 | Desktop (macOS va Windows) uchun Impeller sukut bo'yicha standartga aylandi |
Bugungi kunda iOS'da eski Skia dvigateli to'liq olib tashlangan va Impeller yagona qo'llab-quvvatlanadigan dvigateldir (Impeller Engine). Android'da Skia opt-out bayrog'i hali vaqtincha mavjud, ammo kelgusi relizlarda butunlay o'chirilishi e'lon qilingan.
3. Ilmiy o'lchovlar: Ilovan (2026) benchmark natijalari {#ilovan-benchmark}
2026-yil sentabrda e'lon qilingan A. Ilovan tadqiqoti ("Cross-Platform vs Native Mobile Development: An Empirical Study of Software Quality Trade-offs", arXiv:2609.21544) krossplatforma bo'yicha eng so'nggi va batafsil mustaqil ilmiy manba hisoblanadi (arXiv:2609.21544).
Sinov shartlari
- Loyiha: O'simliklarni boshqarish ilovasi (Plant management).
- Kod bazalari (5 ta): Native iOS (Swift + SwiftUI), Native Android (Kotlin + Jetpack Compose), Flutter (Dart + Material), React Native (TypeScript + Expo, New Architecture), KMP (umumiy Kotlin mantiq + nativ UI).
- Qurilmalar: iPhone 15 (iOS 26.3.1) va Pixel 6 Pro (Android 16).
- Hajm: Har bir variant 2,000 marta ishga tushirilgan (jami 16,000 ta sinov).
1-natija: 7 ta mijoz amali yig'indisi (Subtotal, ms)
Ushbu operatsiyalar real tarmoq va lokal hisob-kitobni o'z ichiga oladi (login, fetch, conditional fetch, image download, decode, local sync, upload):
| OS | Yondashuv | O'rtacha vaqt (ms) | Nativga nisbatan farq (shu OS bo'yicha) |
|---|---|---|---|
| iOS | Native (SwiftUI) | 353.120 | Asosiy (reference) |
| iOS | Kotlin Multiplatform | 374.677 | +6.1% |
| iOS | Flutter | 518.638 | +46.9% |
| iOS | React Native | 679.319 | +92.4% |
| Android | Native (Compose) | 452.755 | Asosiy (reference) |
| Android | Kotlin Multiplatform | 504.592 | +11.4% |
| Android | React Native | 1218.088 | +169.0% |
| Android | Flutter | 1547.144 | +241.7% |
Xulosa: iOS'da KMP nativga deyarli teng natija ko'rsatgan (+6.1%). Flutter esa React Native'dan tezroq ishlagan (+46.9% vs +92.4%). Android'da esa Flutter tarmoq va ma'lumotlar bazasi sinxronlash amallarida nativdan sezilarli darajada orqada qolgan.
2-natija: Sintetik UI testlari (Mean ± SD, ms)
| OS | Yondashuv | 50 qatorni render qilish | 200 qatorni scroll qilish |
|---|---|---|---|
| iOS | Native (SwiftUI) | 49.708 ± 3.108 | 871.525 ± 6.199 |
| iOS | Kotlin Multiplatform | 36.517 ± 1.460 | 876.012 ± 4.958 |
| iOS | React Native | 44.568 ± 5.394 | 76.701 ± 6.606 |
| iOS | Flutter | 33.989 ± 6.014 | 890.003 ± 3.844 |
| Android | Native (Compose) | 45.338 ± 5.646 | 316.170 ± 15.054 |
| Android | Kotlin Multiplatform | 27.404 ± 6.011 | 316.347 ± 9.723 |
| Android | React Native | 102.279 ± 32.224 | 125.403 ± 15.098 |
| Android | Flutter | 95.379 ± 18.814 | 912.652 ± 11.036 |
Ogohlantirish (Muallif izohi): Scroll testidagi past sonlar React Native'ning ravonligini bildirmaydi — RN drayveri animatsiyani tezroq uzgani sababli sinov muddati qisqa chiqqan. Render testida esa Flutter iOS'da eng tezkor (33.98 ms) natijani qayd etgan.
3-natija: Yozilgan kod hajmi (SLOC)
| Texnologiya | Fayllar soni | Kod satrlari (SLOC) | Birlashgan nativga nisbatan |
|---|---|---|---|
| Native iOS | 63 | 4,522 | — |
| Native Android | 26 | 4,583 | — |
| Birlashgan nativ (ikkisi) | 89 | 9,105 | 100% (reference) |
| Flutter | 16 | 5,466 | −40.0% |
| React Native | 39 | 4,209 | −53.8% |
| Kotlin Multiplatform | 16 | 4,195 | −53.9% (1,624 umumiy + 1,291 Android + 1,280 iOS) |
Flutter ikkita alohida nativ ilovaga nisbatan kod hajmini 40% ga qisqartiradi va arxitekturani 16 ta faylda ixcham saqlashga imkon beradi.
4. Tadqiqot cheklovlari va boshqa ilmiy ishlar {#research-context}
Ilovan (2026) maqolasida quyidagi cheklovlar ochiq qayd etilgan:
- Sinovda faqat vaqt o'lchangan — CPU, xotira (RAM), batareya iste'moli va ilova hajmi bu testga kirmagan.
- Sinov bitta dasturchi tomonidan yozilgan bitta ilova asosida o'tkazilgan.
- Testlar parallel emas, ketma-ket o'tkazilgan.
Boshqa ilmiy tadqiqotlar xulosalari (Ilovan 2026 related work):
- Oliveira et al. (EASE 2023): Nativ platformalar doimiy resurs samaradorligi bo'yicha g'olib; og'ir CPU hisob-kitoblarida Flutter krossplatformalar orasida eng kuchlisi.
- Nawrocki et al. (IEEE Computer 2021): Nativ ilova hajmi va ishga tushish tezligida yutadi; Flutter krossplatforma kompromisi bo'yicha eng kuchli umumiy yechim.
- Biørn-Hansen et al. (EMSE 2020): Nativ Android xotirani yaxshiroq boshqaradi; Flutter'da qo'shimcha xotira sarfi kam, ammo tinch turgan holatdagi (idle) xotira yuki balandroq.
- Jetpack Compose 1.9.0: Google Compose 1.9.0 dan boshlab kadrlar tushib qolishi (jank) bo'yicha to'liq optimallashuvga erishganini e'lon qilgan (Android Compose Performance).
5. Freym byudjeti: 60 Hz va 120 Hz ProMotion {#frame-budget}
Silliq interfeys ta'minlash uchun dasturchi freym vaqtini to'g'ri tushunishi kerak (Flutter Best Practices):
- 60 Hz displeylar: Standart yangilanish vaqti — $16.6\text{ ms}$. Flutterning ikkita mustaqil oqimi bor: UI (build) oqimi va Raster (render) oqimi. Ular konveyer (pipeline) shaklida parallel ishlaydi — ya'ni har bir oqimga 16 ms dan vaqt ajratiladi.
- Kechikish (Latency) talabi: Agar foydalanuvchi teginishiga (touch response) darhol javob qaytishi shart bo'lsa, umumiy kadr $16\text{ ms}$ ichida qurilishi va chizilishi kerak (ya'ni $8\text{ ms}$ UI oqimiga, $8\text{ ms}$ esa raster oqimiga).
- 120 Hz ProMotion (iPhone Pro, iPad Pro): Yangilanish vaqti — $8.3\text{ ms}$. Freymlar sakramasligi uchun har bir freym umumiy hisobda 8 ms dan kam vaqtda to'liq tayyor bo'lishi shart.
6. O'lchov amaliyoti: integration_test va drayver {#profiling}
Ilovangizning scroll ravonligini profil qilish uchun integration_test paketidan foydalaniladi:
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
void main() {
final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('Scroll unumdorligini tekshirish', (tester) async {
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: ListView.builder(
key: const Key('perf_list'),
itemCount: 200,
itemBuilder: (context, index) => ListTile(
title: Text('Element $index'),
),
),
),
),
);
await binding.traceAction(() async {
await tester.fling(find.byKey(const Key('perf_list')), const Offset(0, -500), 1000);
await tester.pumpAndSettle();
}, reportKey: 'scrolling_timeline');
});
}
Drayver fayli (test_driver/perf_driver.dart):
import 'package:flutter_driver/driver_extension.dart';
import 'package:integration_test/integration_test_driver.dart';
Future<void> main() => integrationDriver(
responseDataCallback: (data) async {
if (data != null) {
final timeline = TimelineSummary.summarize(data['scrolling_timeline']);
await timeline.writeTimelineToFile('scrolling_timeline', pretty: true);
}
},
);
Profil rejimida ishga tushirish buyrug'i:
flutter drive --driver=test_driver/perf_driver.dart --target=integration_test/scrolling_test.dart --profile
Natijada build/scrolling_summary.timeline_summary.json fayli hosil bo'ladi va unda average_frame_build_time_millis hamda worst_frame_build_time_millis kabi aniq ko'rsatkichlar saqlanadi.
7. Ilova hajmi (App Size) va uni tahlil qilish {#app-size}
Flutter dvigateli va standart shriftlar o'z ichida bo'lgani sababli, bo'sh ilova ham nativ ilovadan biroz kattaroq hajmga ega bo'ladi:
- Rasmiy hujjatlardagi yagona tarixiy ko'rsatkich (Flutter 1.17, 2020-yil): iPhone 11 da bo'sh ilova 5.4 MB siqilgan (compressed) va 13.7 MB yoyilgan (uncompressed) hajm bergan (Flutter App Size).
- 2026-yilda real ilova hajmini tekshirish buyruqlari:
flutter build ipa --export-method development
Hajmni har bir paket bo'yicha batafsil tahlil qilish:
flutter build ios --analyze-size
Ushbu buyruq build/ ichida .json fayl qoldiradi, uni dart devtools orqali ochib, aynan qaysi plagin yoki rasm ko'p joy olayotganini ko'rish mumkin.
8. Qaror jadvali: qachon Native, qachon Flutter, qachon KMP? {#decision-table}
Ilmiy dalillar va arxitektura asosida texnologiya tanlash matritsasi:
| Loyiha turi va talab | Tavsiya | Sababi |
|---|---|---|
| Yuqori brending, maxsus animatsiyalar, MVP, startaplar | Flutter | Butun ekran bir xil chiziladi, kod 40% tejaladi, Hot Reload ishlab chiqishni keskin tezlashtiradi. |
| Chuqur Apple ekotizimi (Widgetlar, Vision Pro, Live Activities, CoreML) | Native (Swift/SwiftUI) | Day-0 qo'llab-quvvatlash, minimal ilova hajmi, tizim bilan 100% integratsiya. |
| Mavjud yirik nativ ilovalarga umumiy mantiq qo'shish (Fintech, Banklar) | KMP (Kotlin Multiplatform) | UI nativ qoladi, xavf kam, tarmoq va kripto mantiq yagona Kotlin kodida ishlaydi. |
| Web va SEO juda muhim bo'lgan krossplatforma | React / React Native | Vebda HTML DOM render qilinadi, qidiruv tizimlari uchun ideal. |
9. Xulosa {#xulosa}
- Flutter piksellarni Impeller yordamida to'g'ridan-to'g'ri Metal/Vulkan orqali chizadi; UIKit komponentlaridan foydalanmaydi.
- Impeller 2026-yilda iOS va Desktop'da yagona standartga aylandi, Shader Compilation Jank muammosi bartaraf etildi.
- Ilovan (2026) ilmiy sinovlari ko'rsatganidek, Flutter nativ iOS'ga nisbatan tarmoq va lokal saqlashda +46.9% vaqt sarflaydi, ammo kod bazasini 40% ga qisqartiradi.
- 120 Hz ProMotion ekranlarida kadrlar tushib qolmasligi uchun freym 8 ms dan kam vaqtda chizilishi lozim.
- Har qanday loyihada tanlov qat'iy mezonlarga asoslanishi lozim: tizim bilan chuqur integratsiya uchun Native, tezkor krossplatforma uchun esa Flutter.
Manbalar {#manbalar}
- Architectural Overview — Flutter Docs
- Impeller Rendering Engine — Flutter Docs
- Understanding Shader Compilation Jank — Flutter Docs
- Ilovan, "Cross-Platform vs Native Mobile Development", arXiv:2609.21544 (2026)
- Performance Best Practices — Flutter Docs
- Measuring App Size — Flutter Docs
- Profiling Integration Tests — Flutter Docs
- Jetpack Compose Performance — Android Developers