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 — 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 (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 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.
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 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.
| Parametr | Skia | Impeller |
|---|---|---|
| Shaderlar | Joyida kompilyatsiya (runtime) | Offline kompilyatsiya (build time) |
| Shader jank | Birinchi kadr uchun 50–200 ms | Yo'q (0 ms) |
| Shader formati | Shaxsiy (SkSL) | SPIR-V (universal) |
| GPU backend'lari | OpenGL, Vulkan, Metal | Vulkan, Metal, Direct3D 12 |
| Xotira iste'moli | Yuqori (vaqtinchalik teksturalar) | Xotira hovuzlari, -40% gacha |
| Platformalar | Android, iOS, Web, Desktop | Android, iOS, Desktop |
| Holat | Barqaror (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.
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 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 — 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.
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.
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.
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.
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'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'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.
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.
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
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 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.
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.
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.
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
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.