Azimjon Abdurasulov

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

  1. Render arxitekturasi: kim qanday chizadi?
  2. Impeller evolyutsiyasi: Skia'dan to'liq voz kechish
  3. Ilmiy o'lchovlar: Ilovan (2026) benchmark natijalari
  4. Tadqiqot cheklovlari va boshqa ilmiy ishlar
  5. Freym byudjeti: 60 Hz va 120 Hz ProMotion
  6. O'lchov amaliyoti: integration_test va drayver
  7. Ilova hajmi (App Size) va uni tahlil qilish
  8. Qaror jadvali: qachon Native, qachon Flutter, qachon KMP?
  9. Xulosa
  10. Manbalar

1. Render arxitekturasi: kim qanday chizadi? {#rendering}

Dasturlash tizimlari ekranga piksellarni chiqarish bo'yicha tubdan farq qiladi:

MezonFlutterReact Native (New Arch)Kotlin Multiplatform (KMP)Nativ iOS (SwiftUI)
Piksel chizuvchiImpeller: 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'lanadiNativ UI: SwiftUI va Jetpack Compose orqali tizim chizadiCoreAnimation / Metal: Tizim optimallashtirilgan render zanjiri
UIKit integratsiyasiTizim UIKit tugmalarini ishlatmaydi; CupertinoButton toza Dart kodidirNativ UIButton / UIView yaratiladiNativ Button / View yaratiladiSof nativ View
KompilyatsiyaIshlab chiqarishda (Release) to'liq AOT, ishlab chiqishda (Debug) JIT + Hot ReloadHermes 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:

VersiyaSanaImpeller holati va o'zgarishlar
Flutter 3.102023-05-10iOS uchun Impeller sukut bo'yicha yoqildi (Metal API)
Flutter 3.242024-08-06Android uchun Vulkan sinovlari o'tkazildi, to'liq chiqarilish kechiktirildi
Flutter 3.272024-12-11Android uchun Impeller sukut bo'yicha yoqildi
Flutter 3.292025-02-12Android qurilmalarning 100% qismida faollashdi (OpenGL ES fallback bilan)
Flutter 3.472026-08-12Desktop (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):

OSYondashuvO'rtacha vaqt (ms)Nativga nisbatan farq (shu OS bo'yicha)
iOSNative (SwiftUI)353.120Asosiy (reference)
iOSKotlin Multiplatform374.677+6.1%
iOSFlutter518.638+46.9%
iOSReact Native679.319+92.4%
AndroidNative (Compose)452.755Asosiy (reference)
AndroidKotlin Multiplatform504.592+11.4%
AndroidReact Native1218.088+169.0%
AndroidFlutter1547.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)

OSYondashuv50 qatorni render qilish200 qatorni scroll qilish
iOSNative (SwiftUI)49.708 ± 3.108871.525 ± 6.199
iOSKotlin Multiplatform36.517 ± 1.460876.012 ± 4.958
iOSReact Native44.568 ± 5.39476.701 ± 6.606
iOSFlutter33.989 ± 6.014890.003 ± 3.844
AndroidNative (Compose)45.338 ± 5.646316.170 ± 15.054
AndroidKotlin Multiplatform27.404 ± 6.011316.347 ± 9.723
AndroidReact Native102.279 ± 32.224125.403 ± 15.098
AndroidFlutter95.379 ± 18.814912.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)

TexnologiyaFayllar soniKod satrlari (SLOC)Birlashgan nativga nisbatan
Native iOS634,522—
Native Android264,583—
Birlashgan nativ (ikkisi)899,105100% (reference)
Flutter165,466−40.0%
React Native394,209−53.8%
Kotlin Multiplatform164,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:

  1. Sinovda faqat vaqt o'lchangan — CPU, xotira (RAM), batareya iste'moli va ilova hajmi bu testga kirmagan.
  2. Sinov bitta dasturchi tomonidan yozilgan bitta ilova asosida o'tkazilgan.
  3. 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 talabTavsiyaSababi
Yuqori brending, maxsus animatsiyalar, MVP, startaplarFlutterButun 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 krossplatformaReact / React NativeVebda 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}

  1. Architectural Overview — Flutter Docs
  2. Impeller Rendering Engine — Flutter Docs
  3. Understanding Shader Compilation Jank — Flutter Docs
  4. Ilovan, "Cross-Platform vs Native Mobile Development", arXiv:2609.21544 (2026)
  5. Performance Best Practices — Flutter Docs
  6. Measuring App Size — Flutter Docs
  7. Profiling Integration Tests — Flutter Docs
  8. Jetpack Compose Performance — Android Developers

Markdown manba

iOS Lessons