Impeller: əsas anlayışlar, arxitektura və üstünlüklər

Müəllif: IT Sectr Dərc olunub: 2026-06-04 Oxuma vaxtı: 9 dəq

Impeller — Google tərəfindən Skia-nı əvəz etmək və onun fundamental problemlərini — kadrların ilk renderində şader ləngimələrini (jank), yüksək yaddaş istehlakını və müxtəlif qrafik backendlərin dəstəklənməsindəki çətinlikləri aradan qaldırmaq üçün hazırlanmış müasir Flutter render mühərrikidir. Skia-dan fərqli olaraq, Impeller şaderləri əvvəlcədən (offline) kompilyasiya edir, SPIR-V-ni aralıq təsvir kimi istifadə edir və birbaşa Vulkan, Metal və Direct3D 12 ilə işləyir. Flutter Team (2025) məlumatlarına görə, Impeller şader ləngimələrinin 95%-ə qədərini aradan qaldıraraq, hətta aşağı səviyyəli cihazlarda belə proqnozlaşdırıla bilən 60 FPS təmin edir.

Əsas məqamlar

  • Impeller — Skia-nı əvəz edən yeni Flutter render mühərriki
  • Offline kompilyasiya şaderləri ilk render zamanı shader jank-ı aradan qaldırır
  • Arxitektura universal aralıq təsvir kimi SPIR-V-dən istifadə edir
  • Backendlər Impeller birbaşa Vulkan, Metal və Direct3D 12 ilə işləyir
  • Performans bütün şaderlərin əvvəlcədən işlənməsi sayəsində proqnozlaşdırıla biləndir

Impeller nədir?

Impeller — C++ dilində yazılmış, Flutter komandası tərəfindən Skia-nı əsas renderer kimi əvəz etmək üçün hazırlanan açıq mənbəli qrafik render mühərrikidir. Layihə 2021-ci ildə Skia-nın əziyyət çəkdiyi çoxillik shader jank probleminə cavab olaraq elan edilib. Impeller Skia-nın fork-u deyil — mobil GPU-ların və müasir qrafik API-lərin məhdudiyyətləri nəzərə alınmaqla hazırlanmış tamamilə yeni tətbiqdir.

Impeller-in əsas ideyası şader kompilyasiyasını tətbiqin işləmə vaxtından (runtime) onun qurulma mərhələsinə (build time) keçirməkdir. Skia-da şaderlər ilk istifadə zamanı, istifadəçi artıq tətbiqlə qarşılıqlı əlaqədə olduqda kompilyasiya olunur. Impeller bütün şaderləri əvvəlcədən (offline) kompilyasiya edir, onları SPIR-V binar formatına paketləyir və tətbiqlə birlikdə təqdim edir. İş vaxtı Impeller əvvəlcədən kompilyasiya edilmiş şaderləri yükləyir və bu, kompilyasiya ilə bağlı gecikmələri aradan qaldırır.

Impeller həmçinin yaddaş istehlakı problemini həll edir. Skia render prosesində çoxlu sayda müvəqqəti obyektlər (teksturlar, buferlər) yaradır ki, bu da məhdud resurslu cihazlarda yaddaş parçalanmasına səbəb olur. Impeller yaddaş hovuzlarından (memory pools) istifadə edir və ayrılmış resursları təkrar istifadə edir, pik yaddaş istehlakını 30–40% azaldır.

SPIR-V əsas kimi

SPIR-V (Standard Portable Intermediate Representation) — Khronos Group tərəfindən hazırlanmış şaderlərin aralıq təsviridir. Impeller bütün şaderlər üçün universal format kimi SPIR-V-dən istifadə edir. Qurulma mərhələsində Impeller dilində (effektləri təsvir etmək üçün özəl C++ DSL) şaderlər SPIR-V-yə kompilyasiya olunur. İş vaxtı SPIR-V yüklənir və platformaya uyğun formata — Metal üçün MSL, Vulkan üçün GLSL və ya Direct3D 12 üçün DXIL-ə tərcümə olunur.

Impeller necə işləyir?

Impeller arxitekturası bir neçə təbəqədən ibarətdir, hər biri ciddi şəkildə müəyyən edilmiş tapşırığı yerinə yetirir: render əmrləri siyahısının işlənməsi, GPU resurslarının idarə edilməsi və şaderlərin icrası. Bu modulluq yeni qrafik API-lərin dəstəyini asanlıqla əlavə etməyə imkan verir.

Aşağı təbəqə — qrafik API (Vulkan, Metal, Direct3D 12) üzərində abstraksiyadır. Impeller OpenGL-i dəstəkləmir, çünki OpenGL şaderlərin səmərəli offline kompilyasiyası imkanlarını təmin etmir. Bu səviyyədə həyata keçirilir: təpə buferlərinin idarə edilməsi, pipeline-ların (qrafik konveyerlərin) yaradılması və keşləşdirilməsi, GPU sinxronizasiyası. Pipeline Impeller-də — şaderləri, rastrlaşdırma və blending parametrlərini özündə birləşdirən əvvəlcədən kompilyasiya edilmiş GPU vəziyyətidir. Bütün pipeline-lar inisializasiya mərhələsində yaradılır və bu, render zamanı kompilyasiyanı aradan qaldırır.

Orta təbəqə — resursların idarə edilməsi sistemidir. GPU resurslarını — teksturları, buferləri, samplerləri ayırır və təkrar istifadə edir. Hər kadrda yeni tekstur yaratmaq əvəzinə, Impeller müxtəlif ölçülü və formatlı tekstur hovuzu saxlayır. Yaddaş hovuzu istifadə olunmayan resursları avtomatik qaytarır və lazım olduqda genişlənə bilər, lakin Skia-ya xas olan parçalanma olmadan.

Yuxarı təbəqə — Flutter Engine-in Canvas API əmrlərini çevirdiyi render qrafıdır. Impeller Display List-i (çəkmə əmrləri siyahısını) qəbul edir və ondan əməliyyat asılılıqlarının qrafını qurur. Qraf optimallaşdırılır: lazımsız render keçidləri silinir, eyni GPU vəziyyətinə malik əməliyyatlar birləşdirilir. Sonra qraf əvvəlcədən yaradılmış pipeline-lardan istifadə edərək Vulkan/Metal çağırışları ardıcıllığına kompilyasiya olunur.

Impeller-də kadrın icra axını

Hər kadr sabit konveyerdən keçir: Display List → render qrafı → qrafın kompilyasiyası → GPU əmrlərinin göndərilməsi. Post-effektlər (bulanıqlıq, kölgələr) və ya dərinlik buferinin hazırlanması üçün əlavə keçidlər əlavə edilə bilər. Kadr vaxtı Impeller-də Skia-dan daha proqnozlaşdırıla biləndir, çünki şader kompilyasiyası üçün qeyri-deterministik gecikmələr mövcud deyil.

Impeller vs Skia: müqayisə

Impeller və Skia-nın müqayisəsi renderə yanaşmada fərqləri göstərir. Skia — ümumi təyinatlı universal 2D kitabxanası, Impeller isə mobil UI tələbləri üçün optimallaşdırılmış Flutter üçün ixtisaslaşdırılmış mühərrikdir.

ParametrSkiaImpeller
ŞaderlərYerində kompilyasiya (runtime)Offline kompilyasiya (build time)
Shader jankİlk kadr üçün 50–200 msYoxdur (0 ms)
Şader formatıÖzəl (SkSL)SPIR-V (universal)
GPU backendleriOpenGL, Vulkan, MetalVulkan, Metal, Direct3D 12
Yaddaş istehlakıYüksək (müvəqqəti teksturlar)Yaddaş hovuzları, -40%
PlatformalarAndroid, iOS, Web, DesktopAndroid, iOS, Desktop
StatusStabil (əsas)Preview (Skia-nı əvəz edir)

Əsas fərq — şaderlərə yanaşma. Skia şaderləri istifadə anında kompilyasiya edir, tanış olmayan effektlərin ilk renderində shader jank yaradır. Impeller bunu offline kompilyasiya hesabına aradan qaldırır. Həmçinin Skia OpenGL-i dəstəkləyir ki, bu da Flutter-in web versiyası üçün zəruridir, lakin Impeller OpenGL-dən daha müasir API-lərin xeyrinə imtina edir və bu, mobil cihazlarda daha yaxşı performans verir.

Mövcud Flutter kodu ilə uyğunluq

Flutter tətbiqləri üçün Impeller-ə keçid kodun dəyişdirilməsini tələb etmir. Impeller Skia ilə eyni Canvas API-ni tətbiq edir, buna görə də bütün vidjetlər, animasiyalar və fərdi çəkmələr eyni şəkildə işləyir. Geri uyğunluq Flutter Engine səviyyəsində təmin edilir — mühərrik tətbiqin inisializasiyası mərhələsində rendereri (Skia və ya Impeller) seçir.

Impeller-in üstünlükləri

Impeller Skia ilə müqayisədə birbaşa istifadəçi təcrübəsinə və Flutter tətbiqlərinin performansına təsir edən bir neçə ölçülə bilən üstünlük verir.

Shader jank-ın aradan qaldırılması

Shader jank — Impeller-in tamamilə həll etdiyi Skia-nın əsas problemidir. Flutter tətbiqi qradientlər, maskalar və ya qeyri-standart blendlərlə yeni ekran göstərdikdə, Skia animasiya zamanı şaderləri kompilyasiya edir və bu, kadrların buraxılmasına səbəb olur. Impeller bütün şaderləri qurulma mərhələsində kompilyasiya edir, buna görə də ilk kadr sonrakılar kimi sürətli render olunur. Yavaş GPU-lu cihazlarda (MediaTek Helio, Qualcomm 400 series) fərq xüsusilə nəzərə çarpır — Skia-da hər yeni effekt növü üçün 200 ms gecikmə, Impeller-də isə 0 ms.

Yaddaş istehlakının azaldılması

Impeller GPU yaddaşını idarə etmək üçün resurs hovuzlarından istifadə edir. Skia-da hər kadr, xüsusilə şəffaflıqla render edərkən və ya saveLayer tətbiq edərkən, müvəqqəti səthlər üçün yeni teksturlar yarada bilər. Impeller teksturları kadrlar arasında təkrar istifadə edir və bu, Android-də pik yaddaş istehlakını 30–40%, iOS-da isə 25% azaldır. Bu, xüsusilə Skia-nın 2 GB RAM-lı cihazlarda OOM səhvlərinə səbəb ola biləcəyi uzun siyahılar və animasiyaları olan tətbiqlər üçün vacibdir.

Proqnozlaşdırıla bilən performans

Skia-da kadr render vaxtı hansı şaderlərin artıq kompilyasiya olunmasından asılı olaraq dəyişə bilər. Yeni effektli ilk kadr 50–200 ms çəkə bilər, sonrakılar isə 3–5 ms. Bu qeyri-müəyyənlik optimallaşdırma və testləşdirməni çətinləşdirir. Impeller bütün şaderlər artıq kompilyasiya olunduğundan və yaddaş ayrılması proqnozlaşdırıla bilən olduğundan vahid kadr vaxtı təmin edir. Impeller ilə Flutter Engine hər kadr üçün vaxt büdcəsini daha dəqiq hesablaya bilər.

Müasir qrafik API-lərin dəstəyi

Impeller OpenGL qatı olmadan birbaşa Vulkan (Android), Metal (iOS) və Direct3D 12 (Windows) ilə işləyir. Bu bir neçə üstünlük verir: daha aşağı sürücü gecikməsi (OpenGL ilə müqayisədə 50% az), GPU yaddaşı üzərində birbaşa nəzarət və müasir imkanlara çıxış (kafel GPU arxitekturası, GPU-driven rendering). OpenGL artıq inkişaf etdirilmir və onun mobil cihazlardakı sürücüləri tez-tez performans darboğazına çevrilir.

Cari status və planlar

Impeller aktiv inkişaf mərhələsindədir və Flutter Master və Beta kanallarında mövcuddur. Flutter 3.16-dan başlayaraq Impeller iOS-da defolt olaraq aktivdir, Android-də isə konfiqurasiya bayrağı vasitəsilə seçimlidir. Skia-nın Impeller ilə tam əvəz edilməsi 2026-cı ilin stabil Flutter buraxılışlarından birində gözlənilir.

iOS: Impeller defolt

iOS-da Impeller Metal vasitəsilə işləyir və Flutter 3.16-dan defolt olaraq aktivdir. Flutter komandası tətbiqləri Impeller-də test etməyi və problemlər barədə məlumat verməyi tövsiyə edir. Skia-ya qayıtmaq üçün Info.plist faylında Impeller bayrağı istifadə olunur: FlutterEnableImpeller = NO. Flutter Team məlumatlarına görə, iOS-da tətbiqlərin 92%-i görünən reqressiyalar olmadan Impeller-də işləyir və animasiya performansı 25–40% yaxşılaşır.

Android: seçimli

Android-də Impeller Vulkan vasitəsilə işləyir. Aktiv etmək üçün AndroidManifest.xml-ə meta-teq əlavə edilir: io.flutter.embedded_views_preview. Flutter komandası Impeller-i müxtəlif GPU arxitekturaları (Adreno, Mali, PowerVR) üçün optimallaşdırmağa davam edir. Android-də əsas çətinlik Vulkan dəstəyi olmayan cihazların (Android < 7.0 və ya köhnə GPU) dəstəyidir. Belə cihazlar üçün Skia-da ehtiyat backend və ya proqram rastrlaşdırması ilə Impeller istifadə olunacaq.

Desktop və Web

Windows-da Impeller Direct3D 12 vasitəsilə işləyir (Flutter Master-da aktivdir). macOS və Linux-da — müvafiq olaraq Metal və Vulkan vasitəsilə. Web üçün Impeller planlaşdırılmır, çünki Flutter-in web versiyası CanvasKit-dən (WebAssembly vasitəsilə Skia) istifadə edir və brauzerdə fərqli şader kompilyasiya mexanizminə görə shader jank kritik problem deyil. Web versiyası Skia-dan istifadə etməyə davam edəcək.

Yol xəritəsi

Google Impeller-in yol xəritəsini dərc edib: 2024 — Impeller iOS-da defolt; 2025 — Impeller Android və Windows-da defolt; 2026 — Skia-nın Flutter Engine-dən tam silinməsi. Bundan sonra Flutter Impeller-dən yeganə render mühərriki kimi istifadə edəcək, bu da dəstəyi sadələşdirəcək, mühərrik ölçüsünü azaldacaq və bütün platformalarda performansı yaxşılaşdıracaq.

Tez-tez verilən suallar

Flutter-də Impeller-i necə aktiv etmək olar?

iOS-da Impeller Flutter 3.16-dan defolt olaraq aktivdir. Android-də AndroidManifest.xml-ə io.flutter.embedded_views_preview meta-teqini true dəyəri ilə əlavə edin. Windows-da işə salarkən --enable-impeller bayrağından istifadə edin. Bütün hallarda Dart kodunda FlutterEngine vasitəsilə məcburi aktiv edilə bilər.

Skia işləyirsə, niyə onu əvəz etməli?

Skia işləyir, lakin fundamental problemlərə malikdir: shader jank (şader kompilyasiyası üçün 50–200 ms gecikmə), yüksək yaddaş istehlakı və OpenGL arxitekturasının məhdudiyyətləri. Impeller xüsusi olaraq Flutter üçün hazırlanmışdır və bu problemləri şaderlərin offline kompilyasiyası və yaddaş hovuzları vasitəsilə aradan qaldırır.

Impeller bütün Flutter vidjetlərini dəstəkləyir?

Bəli, Impeller Skia ilə eyni Canvas API-ni tətbiq edir. Bütün standart Flutter vidjetləri — mətn, şəkillər, animasiyalar, fərdi paint-lər — Impeller-də dəyişiklik olmadan işləyir. Geri uyğunluq Flutter Engine səviyyəsində təmin edilir və keçid tərtibatçı üçün şəffafdır.

Skia və Impeller eyni anda istifadə edilə bilər?

Xeyr, tətbiq bir dəfəyə bir render mühərrikindən istifadə edir. Seçim Flutter Engine-in inisializasiyası zamanı bayraq vasitəsilə edilir. Tətbiqin işləməsi zamanı Skia və Impeller arasında keçid mümkün deyil — renderer FlutterEngine-in ilk nümunəsi yaradılmadan əvvəl təyin edilir.

Impeller tətbiqindən sonra Skia-ya nə olacaq?

Skia Chrome, Android və digər layihələr üçün Google-ın müstəqil kitabxanası olaraq mövcud olmağa davam edəcək. Flutter-də Skia əsas renderer olaraq Impeller ilə əvəz olunacaq. Skia Flutter-in web versiyası (CanvasKit vasitəsilə) və Vulkan/Metal dəstəyi olmayan cihazlar üçün ehtiyat variant kimi qalacaq.

Nəticə

  • Impeller — şaderlərin offline kompilyasiyası vasitəsilə shader jank-ı aradan qaldıran yeni Flutter render mühərriki
  • Arxitektura SPIR-V, əvvəlcədən kompilyasiya edilmiş pipeline-lar və yaddaş hovuzlarına əsaslanır
  • Müqayisə Skia ilə: ilk renderdə gecikmə yoxdur, yaddaş 30–40% azalır
  • Backendlər köhnəlmiş OpenGL olmadan Vulkan, Metal və Direct3D 12 dəstəkləyir
  • Status iOS-da — defolt, Android və Windows-da — seçimli (Flutter 3.16+)
  • Uyğunluq tam: bütün mövcud Flutter vidjetləri kod dəyişikliyi olmadan işləyir
  • İstifadə edin Impeller-i yeni Flutter layihələrində və gecikmələri aradan qaldırmaq üçün mövcud olanları köçürün

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun