Impeller: asosiy tushunchalar, arxitektura va afzalliklar

Muallif: IT Sectr Nashr etilgan: 2026-06-04 O'qish vaqti: 9 daq

Impeller — bu Google tomonidan Skia'ni almashtirish va uning fundamental muammolarini — kadrlarni birinchi renderlashda shader kechikishlarini (jank), yuqori xotira iste'molini va turli grafik backend'larni qo'llab-quvvatlashdagi qiyinchiliklarni bartaraf etish uchun ishlab chiqilgan zamonaviy Flutter render dvigatelidir. Skia'dan farqli o'laroq, Impeller shaderlarni oldindan (offline) kompilyatsiya qiladi, SPIR-V ni oraliq tasvir sifatida ishlatadi va to'g'ridan-to'g'ri Vulkan, Metal va Direct3D 12 bilan ishlaydi. Flutter Team (2025) ma'lumotlariga ko'ra, Impeller shader kechikishlarining 95% gacha bartaraf etib, hatto boshlang'ich darajadagi qurilmalarda ham bashorat qilinadigan 60 FPS ni ta'minlaydi.

Asosiy muhim nuqtalar

  • Impeller — Skia'ni almashtiruvchi yangi Flutter render dvigateli
  • Offline kompilyatsiya shaderlarni birinchi renderlashda shader jank'ni bartaraf etadi
  • Arxitektura universal oraliq tasvir sifatida SPIR-V dan foydalanadi
  • Backend'lar Impeller to'g'ridan-to'g'ri Vulkan, Metal va Direct3D 12 bilan ishlaydi
  • Ishlash barcha shaderlarni oldindan qayta ishlash hisobiga bashorat qilinadi

Impeller nima?

Impeller — bu C++ da yozilgan ochiq kodli grafik render dvigateli bo'lib, Flutter jamoasi tomonidan Skia'ni asosiy renderer sifatida almashtirish uchun ishlab chiqilmoqda. Loyiha 2021 yilda Skia azob chekayotgan ko'p yillik shader jank muammosiga javob sifatida e'lon qilingan. Impeller Skia'ning fork'i emas — bu mobil GPU'lar va zamonaviy grafik API'larning cheklovlarini hisobga olgan holda ishlab chiqilgan mutlaqo yangi tatbiqdir.

Impeller'ning asosiy g'oyasi shader kompilyatsiyasini ilovaning ishlash vaqtidan (runtime) uni qurish bosqichiga (build time) o'tkazishdir. Skia'da shaderlar birinchi foydalanishda, foydalanuvchi allaqachon ilova bilan muloqotda bo'lganida kompilyatsiya qilinadi. Impeller barcha shaderlarni oldindan (offline) kompilyatsiya qiladi, ularni SPIR-V ikkilik formatiga paketlaydi va ilova bilan birga yetkazib beradi. Ishlash vaqtida Impeller oldindan kompilyatsiya qilingan shaderlarni yuklaydi, bu esa kompilyatsiya bilan bog'liq kechikishlarni bartaraf etadi.

Impeller shuningdek xotira iste'moli muammosini hal qiladi. Skia render jarayonida ko'plab vaqtinchalik obyektlar (teksturalar, buferlar) yaratadi, bu esa cheklangan resursli qurilmalarda xotira parchalanishiga olib keladi. Impeller xotira hovuzlaridan (memory pools) foydalanadi va ajratilgan resurslarni qayta ishlatadi, eng yuqori xotira iste'molini 30–40% ga kamaytiradi.

SPIR-V asos sifatida

SPIR-V (Standard Portable Intermediate Representation) — Khronos Group tomonidan ishlab chiqilgan shaderlarning oraliq tasviridir. Impeller barcha shaderlar uchun universal format sifatida SPIR-V dan foydalanadi. Qurilish bosqichida Impeller tilidagi (effektlarni tavsiflash uchun shaxsiy C++ DSL) shaderlar SPIR-V ga kompilyatsiya qilinadi. Ishlash vaqtida SPIR-V yuklanadi va platformaga xos formatga — Metal uchun MSL, Vulkan uchun GLSL yoki Direct3D 12 uchun DXIL ga tarjima qilinadi.

Impeller qanday ishlaydi?

Impeller arxitekturasi bir necha qatlamlardan iborat bo'lib, ularning har biri qat'iy belgilangan vazifani bajaradi: render buyruqlari ro'yxatini qayta ishlash, GPU resurslarini boshqarish va shaderlarni bajarish. Bu modullik yangi grafik API'larni qo'llab-quvvatlashni oson qo'shish imkonini beradi.

Pastki qatlam — grafik API (Vulkan, Metal, Direct3D 12) ustidagi abstraksiyadir. Impeller OpenGL'ni qo'llab-quvvatlamaydi, chunki OpenGL shaderlarning samarali offline kompilyatsiyasi imkoniyatlarini ta'minlamaydi. Bu darajada amalga oshiriladi: uch buferlarini boshqarish, pipeline'larning (grafik konveyerlarning) yaratilishi va keshlanishi, GPU sinxronizatsiyasi. Pipeline Impeller'da — shaderlar, rastrlashtirish va blending sozlamalarini o'z ichiga olgan oldindan kompilyatsiya qilingan GPU holatidir. Barcha pipeline'lar initsializatsiya bosqichida yaratiladi va bu render vaqtida kompilyatsiyani bartaraf etadi.

O'rta qatlam — resurslarni boshqarish tizimidir. U GPU resurslarini — teksturalar, buferlar, samplerni ajratadi va qayta ishlatadi. Har bir kadrda yangi tekstura yaratish o'rniga, Impeller turli o'lcham va formatdagi tekstura hovuzini saqlaydi. Xotira hovuzi foydalanilmayotgan resurslarni avtomatik qaytaradi va kerak bo'lganda kengayishi mumkin, ammo Skia'ga xos bo'lgan parchalanishsiz.

Yuqori qatlam — Flutter Engine Canvas API buyruqlarini aylantiradigan render grafigidir. Impeller Display List (chizish buyruqlari ro'yxati) ni qabul qiladi va undan operatsiyalar bog'liqlik grafigini quradi. Graf optimallashtiriladi: keraksiz render o'tishlari olib tashlanadi, bir xil GPU holatiga ega operatsiyalar birlashtiriladi. Keyin graf oldindan yaratilgan pipeline'lardan foydalanib Vulkan/Metal chaqiruvlari ketma-ketligiga kompilyatsiya qilinadi.

Impeller'da kadr bajarilish oqimi

Har bir kadr sobit konveyerdan o'tadi: Display List → render grafigi → graf kompilyatsiyasi → GPU buyruqlarini yuborish. Post-effektlar (loyqalash, soyalar) yoki chuqurlik buferini tayyorlash uchun qo'shimcha o'tishlar qo'shilishi mumkin. Kadr vaqti Impeller'da Skia'dan ko'ra bashorat qilinadi, chunki shader kompilyatsiyasi uchun noaniq kechikishlar mavjud emas.

Impeller vs Skia: taqqoslash

Impeller va Skia'ning taqqoslashi renderlashga yondashuvdagi farqlarni ko'rsatadi. Skia — umumiy maqsadli universal 2D kutubxonasi, Impeller esa mobil UI talablari uchun optimallashtirilgan Flutter uchun ixtisoslashgan dvigateldir.

ParametrSkiaImpeller
ShaderlarJoyida kompilyatsiya (runtime)Offline kompilyatsiya (build time)
Shader jankBirinchi kadr uchun 50–200 msYo'q (0 ms)
Shader formatiShaxsiy (SkSL)SPIR-V (universal)
GPU backend'lariOpenGL, Vulkan, MetalVulkan, Metal, Direct3D 12
Xotira iste'moliYuqori (vaqtinchalik teksturalar)Xotira hovuzlari, -40% gacha
PlatformalarAndroid, iOS, Web, DesktopAndroid, iOS, Desktop
HolatBarqaror (asosiy)Preview (Skia'ni almashtiradi)

Asosiy farq — shaderlarga yondashuv. Skia shaderlarni ishlatish paytida kompilyatsiya qiladi, notanish effektlarning birinchi renderida shader jank yaratadi. Impeller buni offline kompilyatsiya hisobiga bartaraf qiladi. Shuningdek Skia OpenGL'ni qo'llab-quvvatlaydi, bu Flutter'ning web versiyasi uchun zarur, ammo Impeller OpenGL'dan zamonaviyroq API'lar foydasiga voz kechadi va bu mobil qurilmalarda yaxshiroq ishlashni beradi.

Mavjud Flutter kodi bilan moslik

Flutter ilovalari uchun Impeller'ga o'tish kodni o'zgartirishni talab qilmaydi. Impeller Skia bilan bir xil Canvas API'ni tatbiq qiladi, shuning uchun barcha vidjetlar, animatsiyalar va shaxsiy chizmalar bir xil ishlaydi. Orqaga moslik Flutter Engine darajasida ta'minlanadi — dvigatel ilovaning initsializatsiya bosqichida rendererni (Skia yoki Impeller) tanlaydi.

Impeller'ning afzalliklari

Impeller Skia bilan solishtirganda bir nechta o'lchanadigan afzalliklarni beradi, ular to'g'ridan-to'g'ri foydalanuvchi tajribasi va Flutter ilovalarining ishlashiga ta'sir qiladi.

Shader jank'ni bartaraf etish

Shader jank — Impeller to'liq hal qiladigan Skia'ning asosiy muammosidir. Flutter ilovasi gradientlar, maskalar yoki nostandart blendlar bilan yangi ekranni ko'rsatganda, Skia animatsiya vaqtida shaderlarni kompilyatsiya qiladi va bu kadrlarning o'tkazib yuborilishiga olib keladi. Impeller barcha shaderlarni qurilish bosqichida kompilyatsiya qiladi, shuning uchun birinchi kadr keyingi kadrlar kabi tez renderlanadi. Sekin GPU'li qurilmalarda (MediaTek Helio, Qualcomm 400 series) farq ayniqsa sezilarli — Skia'da har bir yangi effekt turi uchun 200 ms gacha kechikish, Impeller'da esa 0 ms.

Xotira iste'molini kamaytirish

Impeller GPU xotirasini boshqarish uchun resurs hovuzlaridan foydalanadi. Skia'da har bir kadr, ayniqsa shaffoflik bilan renderlashda yoki saveLayer ishlatganda, vaqtinchalik sirtlar uchun yangi teksturalar yaratishi mumkin. Impeller teksturalarni kadrlar orasida qayta ishlatadi va bu Android'da eng yuqori xotira iste'molini 30–40% ga, iOS'da esa 25% gacha kamaytiradi. Bu, ayniqsa, Skia 2 GB RAM'li qurilmalarda OOM xatolariga sabab bo'lishi mumkin bo'lgan uzun ro'yxatlar va animatsiyalari bo'lgan ilovalar uchun muhimdir.

Bashorat qilinadigan ishlash

Skia'da kadr render vaqti qaysi shaderlar allaqachon kompilyatsiya qilinganiga qarab farq qilishi mumkin. Yangi effektli birinchi kadr 50–200 ms davom etishi mumkin, keyingilari esa 3–5 ms. Bu noaniqlik optimallashtirish va testlashni qiyinlashtiradi. Impeller barcha shaderlar allaqachon kompilyatsiya qilingani va xotira ajratilishi bashorat qilinadigan bo'lgani uchun bir xil kadr vaqtini ta'minlaydi. Impeller bilan Flutter Engine har bir kadr uchun vaqt byudjetini aniqroq hisoblashi mumkin.

Zamonaviy grafik API'larni qo'llab-quvvatlash

Impeller OpenGL qatlamisiz to'g'ridan-to'g'ri Vulkan (Android), Metal (iOS) va Direct3D 12 (Windows) bilan ishlaydi. Bu bir necha afzalliklarni beradi: pastroq drayver kechikishi (OpenGLga nisbatan 50% gacha kam), GPU xotirasi ustidan to'g'ridan-to'g'ri nazorat va zamonaviy imkoniyatlarga kirish (kafel GPU arxitekturasi, GPU-driven rendering). OpenGL endi rivojlantirilmaydi va uning mobil qurilmalardagi drayverlari ko'pincha ishlash tor bo'yniga aylanadi.

Joriy holat va rejalar

Impeller faol rivojlanish bosqichida va Flutter Master va Beta kanallarida mavjud. Flutter 3.16 dan boshlab, Impeller iOS'da sukut bo'yicha yoqilgan, Android'da esa — konfiguratsiya bayrog'i orqali ixtiyoriy. Skia'ni Impeller bilan to'liq almashtirish 2026 yilgi barqaror Flutter relizlaridan birida kutilmoqda.

iOS: Impeller sukut bo'yicha

iOS'da Impeller Metal orqali ishlaydi va Flutter 3.16 dan sukut bo'yicha yoqilgan. Flutter jamoasi ilovalarni Impeller'da sinab ko'rish va muammolar haqida xabar berishni tavsiya qiladi. Skia'ga qaytish uchun Info.plist faylida Impeller bayrog'i ishlatiladi: FlutterEnableImpeller = NO. Flutter Team ma'lumotlariga ko'ra, iOS'da ilovalarning 92% ko'rinadigan regressiyalarsiz Impeller'da ishlaydi va animatsiya ishlashi 25–40% yaxshilanadi.

Android: ixtiyoriy

Android'da Impeller Vulkan orqali ishlaydi. Yoqish uchun AndroidManifest.xml ga meta-teg qo'shiladi: io.flutter.embedded_views_preview. Flutter jamoasi Impeller'ni turli GPU arxitekturalari (Adreno, Mali, PowerVR) uchun optimallashtirishni davom ettirmoqda. Android'da asosiy qiyinchilik Vulkan qo'llab-quvvatlamaydigan qurilmalarni (Android < 7.0 yoki eski GPU) qo'llab-quvvatlashdir. Bunday qurilmalar uchun Skia'da zaxira backend yoki dasturiy rastrlashtirish bilan Impeller ishlatiladi.

Desktop va Web

Windows'da Impeller Direct3D 12 orqali ishlaydi (Flutter Master'da yoqilgan). macOS va Linux'da — mos ravishda Metal va Vulkan orqali. Web uchun Impeller rejalashtirilmagan, chunki Flutter'ning web versiyasi CanvasKit dan (WebAssembly orqali Skia) foydalanadi va brauzerdagi shader kompilyatsiyasining boshqa mexanizmi tufayli shader jank kritik muammo emas. Web versiyasi Skia'dan foydalanishni davom ettiradi.

Yo'l xaritasi

Google Impeller'ning yo'l xaritasini e'lon qildi: 2024 — Impeller iOS'da sukut bo'yicha; 2025 — Impeller Android va Windows'da sukut bo'yicha; 2026 — Skia'ni Flutter Engine'dan to'liq olib tashlash. Shundan so'ng, Flutter Impeller dan yagona render dvigateli sifatida foydalanadi, bu qo'llab-quvvatlashni soddalashtiradi, dvigatel hajmini kamaytiradi va barcha platformalarda ishlashni yaxshilaydi.

Tez-tez so'raladigan savollar

Flutter'da Impeller'ni qanday yoqish mumkin?

iOS'da Impeller Flutter 3.16 dan sukut bo'yicha yoqilgan. Android'da AndroidManifest.xml ga io.flutter.embedded_views_preview meta-tegini true qiymati bilan qo'shing. Windows'da ishga tushirishda --enable-impeller bayrog'idan foydalaning. Barcha hollarda Dart kodida FlutterEngine orqali majburiy yoqilishi mumkin.

Skia ishlayotgan bo'lsa, nega uni almashtirish kerak?

Skia ishlaydi, lekin fundamental muammolarga ega: shader jank (shader kompilyatsiyasi uchun 50–200 ms kechikish), yuqori xotira iste'moli va OpenGL arxitekturasining cheklovlari. Impeller aynan Flutter uchun ishlab chiqilgan va bu muammolarni shaderlarning offline kompilyatsiyasi va xotira hovuzlari orqali bartaraf etadi.

Impeller barcha Flutter vidjetlarini qo'llab-quvvatlaydimi?

Ha, Impeller Skia bilan bir xil Canvas API'ni tatbiq qiladi. Barcha standart Flutter vidjetlari — matn, tasvirlar, animatsiyalar, shaxsiy paint'lar — Impeller'da o'zgarishsiz ishlaydi. Orqaga moslik Flutter Engine darajasida ta'minlanadi va o'tish dasturchi uchun shaffofdir.

Skia va Impeller bir vaqtning o'zida ishlatilishi mumkinmi?

Yo'q, ilova bir vaqtning o'zida bitta render dvigatelidan foydalanadi. Tanlov Flutter Engine initsializatsiyasi paytida bayroq orqali amalga oshiriladi. Ilova ishlayotgan paytda Skia va Impeller o'rtasida o'tish mumkin emas — renderer FlutterEngine'ning birinchi nusxasi yaratilishidan oldin belgilanadi.

Impeller joriy etilgandan keyin Skia'ga nima bo'ladi?

Skia Chrome, Android va boshqa loyihalar uchun Google'ning mustaqil kutubxonasi sifatida mavjud bo'lishda davom etadi. Flutter'da Skia asosiy renderer sifatida Impeller bilan almashtiriladi. Skia Flutter'ning web versiyasi (CanvasKit orqali) va Vulkan/Metal qo'llab-quvvatlamaydigan qurilmalar uchun zaxira variant sifatida qoladi.

Xulosa

  • Impeller — shaderlarni offline kompilyatsiya qilish orqali shader jank'ni bartaraf etuvchi yangi Flutter render dvigateli
  • Arxitektura SPIR-V, oldindan kompilyatsiya qilingan pipeline'lar va xotira hovuzlariga asoslangan
  • Taqqoslash Skia bilan: birinchi renderda kechikish yo'q, xotira 30–40% kamayadi
  • Backend'lar eskirgan OpenGL'siz Vulkan, Metal va Direct3D 12 qo'llab-quvvatlaydi
  • Holat iOS'da — sukut bo'yicha, Android va Windows'da — ixtiyoriy (Flutter 3.16+)
  • Moslik to'liq: barcha mavjud Flutter vidjetlari kod o'zgarishisiz ishlaydi
  • Foydalaning Impeller'ni yangi Flutter loyihalarida va mavjudlarini kechikishlarni bartaraf etish uchun ko'chiring

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing