Kapot osti haqida gaplashamiz 🚙🚀 Impeller: Flutter nega Skia'dan voz kechdi?
Flutter ilova yozgan bo'lsangiz, bu holatni ko'rgandirsiz: ilova ochildi, hammasi silliq, lekin biror animatsiya birinchi marta ishga tushganda ekran bir lahza qotib qoladi. Ikkinchi safar esa hammasi joyida. Buning nomi shader compilation jank.
🧠 Muammo qayerda edi?
Ekrandagi har bir piksel GPU'da shader deb ataladigan kichik dasturlar orqali chiziladi. Skia bu shaderlarni kerak bo'lgan paytda, ya'ni runtime'da compile qilardi. Compile esa bir necha o'n millisekund oladi. 60 FPS uchun bitta frame'ga atigi ~16 ms ajratilgan, demak compile boshlandimi, frame'lar tushib qoladi va foydalanuvchi "qotish"ni ko'radi.
Flutter jamoasi buni SkSL warmup bilan yamashga harakat qildi: shaderlarni oldindan yig'ib, ilova bilan birga yuborish. Lekin bu noqulay edi, har qurilma va har yangilanishda ishonchli ishlamasdi.
⚙️ Impeller nima qildi?
Impeller muammoni yamamadi, uning ildizini olib tashladi:
• Shaderlar runtime'da emas, engine build qilinayotganda oldindan compile qilinadi. Ilova ishlayotganda hech qanday "birinchi marta compile" yo'q.
• Skia hamma uchun yozilgan umumiy kutubxona (Chrome, Android ham ishlatadi). Impeller esa aynan Flutter ehtiyojlari uchun yozilgan, shuning uchun shaderlar soni kichik va oldindan ma'lum.
• Zamonaviy grafik API'lar bilan to'g'ridan-to'g'ri ishlaydi: iOS'da Metal, Android'da Vulkan (eski qurilmalarda OpenGL ES).
• Natija: birinchi frame ham, minginchi frame ham bir xil tezlikda. Performance oldindan aytib bo'ladigan bo'ldi.
📅 Qachondan beri?
iOS'da Flutter 3.10 dan beri default, Android'da esa Flutter 3.27 dan beri (Vulkan qo'llab-quvvatlaydigan qurilmalarda).
💡 Nega bu muhim?
Rendering pipeline endi to'liq Flutter jamoasi nazoratida. Bu custom fragment shader'lar, murakkab effektlar va hattoki Flutter GPU orqali 3D kabi yangi imkoniyatlarga yo'l ochdi.
Xulosa: Skia tez edi, lekin har doim ham emas. Impeller esa har doim bir xil tez bo'lish uchun yaratildi. Foydalanuvchi uchun esa "o'rtacha tez" emas, aynan "qotmaydigan" ilova muhim))
@devspaceuz