Impeller: temel kavramlar, mimari ve avantajlar

Yazar: IT Sectr Yayınlanma: 2026-06-04 Okuma süresi: 9 dk

Impeller, Google tarafından Skia'nın yerini almak ve temel sorunlarını (ilk kare oluşturma sırasında gölgelendirici takılmaları (jank), yüksek bellek tüketimi ve farklı grafik arka uçlarını desteklemenin karmaşıklığı) gidermek için geliştirilen modern bir Flutter oluşturma motorudur. Skia'nın aksine Impeller, gölgelendiricileri önceden (çevrimdışı) derler, SPIR-V'yi ara temsil olarak kullanır ve doğrudan Vulkan, Metal ve Direct3D 12 ile çalışır. Flutter Team (2025)'e göre, Impeller gölgelendirici takılmalarının %95'ine kadarını ortadan kaldırarak giriş seviyesi cihazlarda bile öngörülebilir 60 FPS sağlar.

Önemli Noktalar

  • Impeller — Skia'nın yerini alan yeni bir Flutter oluşturma motoru
  • Çevrimdışı derleme ile ilk oluşturmada gölgelendirici takılması ortadan kalkar
  • Mimari evrensel bir ara temsil olarak SPIR-V kullanır
  • Arka uçlar Impeller doğrudan Vulkan, Metal ve Direct3D 12 ile çalışır
  • Performans tüm gölgelendiricilerin ön işlenmesi sayesinde öngörülebilir

Impeller nedir?

Impeller, Flutter ekibi tarafından Skia'nın yerine birincil oluşturucu olarak geliştirilen, C++ ile yazılmış açık kaynaklı bir grafik oluşturma motorudur. Proje, Skia'nın muzdarip olduğu uzun süredir devam eden gölgelendirici takılması sorununa bir yanıt olarak 2021'de duyuruldu. Impeller, Skia'nın bir çatalı değildir — mobil GPU'ların ve modern grafik API'lerinin sınırlamaları dikkate alınarak tasarlanmış tamamen yeni bir uygulamadır.

Impeller'ın ana fikri, gölgelendirici derlemeyi çalışma zamanı yerine uygulama derleme aşamasına taşımaktır. Skia'da gölgelendiriciler, kullanıcı uygulamayla zaten etkileşim halindeyken ilk kullanımda derlenir. Impeller tüm gölgelendiricileri önceden (çevrimdışı) derler, bunları SPIR-V ikili biçiminde paketler ve uygulamayla birlikte dağıtır. Çalışma zamanında Impeller, önceden derlenmiş gölgelendiricileri yükleyerek derleme gecikmelerini ortadan kaldırır.

Impeller ayrıca bellek tüketimi sorununu da çözer. Skia, oluşturma sırasında birçok geçici nesne (doku, arabellek) oluşturarak sınırlı kaynaklara sahip cihazlarda bellek parçalanmasına yol açar. Impeller bellek havuzları kullanır ve ayrılan kaynakları yeniden kullanarak tepe bellek tüketimini %30–40 oranında azaltır.

Temel olarak SPIR-V

SPIR-V (Standart Taşınabilir Ara Temsil), Khronos Group tarafından geliştirilen bir ara gölgelendirici temsilidir. Impeller, tüm gölgelendiriciler için SPIR-V'yi evrensel bir biçim olarak kullanır. Derleme aşamasında, Impeller dilinde (efektleri tanımlamak için özel bir C++ DSL) yazılan gölgelendiriciler SPIR-V'ye derlenir. Çalışma zamanında SPIR-V yüklenir ve platforma özgü bir biçime çevrilir — Metal için MSL, Vulkan için GLSL veya Direct3D 12 için DXIL.

Impeller nasıl çalışır?

Impeller'ın mimarisi, her biri kesin olarak tanımlanmış bir görevi (oluşturma komut listesini işleme, GPU kaynaklarını yönetme ve gölgelendiricileri yürütme) gerçekleştiren birkaç katmandan oluşur. Bu modülerlik, yeni grafik API'leri için destek eklemeyi kolaylaştırır.

En alt katman, grafik API'si (Vulkan, Metal, Direct3D 12) üzerinde bir soyutlamadır. Impeller, OpenGL'i desteklemez çünkü OpenGL, verimli çevrimdışı gölgelendirici derleme için yetenekler sağlamaz. Bu seviyede şunlar uygulanır: köşe arabellek yönetimi, ardışık düzen oluşturma ve önbelleğe alma, GPU senkronizasyonu. Impeller'da bir ardışık düzen, gölgelendiricileri, rasterleştirme ayarlarını ve harmanlamayı içeren önceden derlenmiş bir GPU durumudur. Tüm ardışık düzenler başlatma sırasında oluşturulur ve oluşturma sırasında derleme işlemini ortadan kaldırır.

Orta katman bir kaynak yönetim sistemidir. GPU kaynaklarını (dokular, arabellekler, örnekleyiciler) ayırır ve yeniden kullanır. Impeller, her karede yeni bir doku oluşturmak yerine, çeşitli boyut ve biçimlerdeki dokulardan oluşan bir havuz tutar. Bellek havuzu, kullanılmayan kaynakları otomatik olarak iade eder ve gerektiğinde genişleyebilir, ancak Skia'nın karakteristik özelliği olan parçalanma olmadan.

En üst katman, Flutter Engine'in Canvas API komutlarını dönüştürdüğü oluşturma grafiğidir. Impeller bir Görüntü Listesi alır ve bundan bir işlem bağımlılık grafiği oluşturur. Grafik optimize edilir: gereksiz oluşturma geçişleri kaldırılır, aynı GPU durumuna sahip işlemler birleştirilir. Grafik daha sonra önceden oluşturulmuş ardışık düzenler kullanılarak bir Vulkan/Metal çağrı dizisine derlenir.

Impeller'da kare yürütme akışı

Her kare sabit bir ardışık düzenden geçer: Görüntü Listesi → oluşturma grafiği → grafik derleme → GPU komut gönderimi. Son efektler (bulanıklaştırma, gölgeler) veya derinlik arabelleği hazırlığı için ek geçişler eklenebilir. Impeller'da kare süresi Skia'dan daha öngörülebilirdir çünkü gölgelendirici derlemesinden kaynaklanan belirlenemeyen gecikmeler yoktur.

Impeller vs Skia: karşılaştırma

Impeller ve Skia karşılaştırması, oluşturma yaklaşımındaki farklılıkları gösterir. Skia genel amaçlı bir 2B kitaplığı iken Impeller, mobil kullanıcı arayüzü gereksinimleri için optimize edilmiş Flutter'a özel bir motordur.

ParametreSkiaImpeller
GölgelendiricilerÇalışma zamanında derlemeÇevrimdışı derleme (derleme zamanı)
Gölgelendirici takılmasıİlk karede 50–200 msYok (0 ms)
Gölgelendirici biçimiSahipli (SkSL)SPIR-V (evrensel)
GPU arka uçlarıOpenGL, Vulkan, MetalVulkan, Metal, Direct3D 12
Bellek tüketimiYüksek (geçici dokular)Bellek havuzları, -%40'a kadar
PlatformlarAndroid, iOS, Web, MasaüstüAndroid, iOS, Masaüstü
DurumKararlı (birincil)Önizleme (Skia'nın yerini alıyor)

Temel fark, gölgelendiricilere yaklaşımdır. Skia, gölgelendiricileri kullanım anında derleyerek bilinmeyen efektleri ilk kez oluştururken gölgelendirici takılması yaratır. Impeller bunu çevrimdışı derleme yoluyla ortadan kaldırır. Ayrıca Skia, Flutter'ın web sürümü için gerekli olan OpenGL'i destekler, ancak Impeller daha modern API'ler lehine OpenGL'den vazgeçerek mobil cihazlarda daha iyi performans sunar.

Mevcut Flutter koduyla uyumluluk

Flutter uygulamaları için Impeller'a geçiş, kod değişikliği gerektirmez. Impeller, Skia ile aynı Canvas API'yi uygular, bu nedenle tüm widgets, animasyonlar ve özel çizimler aynı şekilde çalışır. Geriye dönük uyumluluk Flutter Engine düzeyinde sağlanır — motor, uygulama başlatma aşamasında oluşturucuyu (Skia veya Impeller) seçer.

Impeller'ın avantajları

Impeller, Skia'ya kıyasla kullanıcı deneyimini ve Flutter uygulama performansını doğrudan etkileyen birkaç ölçülebilir avantaj sunar.

Gölgelendirici takılmasının ortadan kaldırılması

Gölgelendirici takılması, Impeller'ın tamamen çözdüğü Skia'nın ana sorunudur. Bir Flutter uygulaması, gradyanlar, maskeler veya standart olmayan karışımlar içeren yeni bir ekran görüntülediğinde, Skia animasyon sırasında gölgelendiricileri derleyerek kare düşüşlerine neden olur. Impeller tüm gölgelendiricileri derleme aşamasında derler, bu nedenle ilk kare sonraki kareler kadar hızlı oluşturulur. Yavaş GPU'ya (MediaTek Helio, Qualcomm 400 serisi) sahip cihazlarda fark özellikle belirgindir — Skia'da her yeni efekt türü için 200 ms'ye kadar gecikme yaşanırken Impeller'da 0 ms'dir.

Bellek tüketiminin azaltılması

Impeller, GPU belleği yönetimi için kaynak havuzları kullanır. Skia'da, özellikle saydamlıkla oluşturma veya saveLayer kullanımı sırasında her kare geçici yüzeyler için yeni dokular oluşturabilir. Impeller, dokuları kareler arasında yeniden kullanarak Android'de tepe bellek tüketimini %30–40 ve iOS'te %25'e kadar azaltır. Bu, uzun listeler ve animasyonlar içeren uygulamalar için özellikle önemlidir; Skia, 2 GB RAM'li cihazlarda OOM hatalarına neden olabiliyordu.

Öngörülebilir performans

Skia'da kare oluşturma süresi, hangi gölgelendiricilerin zaten derlendiğine bağlı olarak değişebilir. Yeni bir efekt içeren ilk kare 50–200 ms sürebilirken, sonraki kareler 3–5 ms sürer. Bu öngörülemezlik optimizasyonu ve test etmeyi zorlaştırır. Impeller, tüm gölgelendiriciler zaten derlenmiş olduğu ve bellek ayırma öngörülebilir olduğu için tutarlı kare süresi sağlar. Impeller ile Flutter Engine, her kare için zaman bütçesini daha doğru hesaplayabilir.

Modern grafik API'leri desteği

Impeller, OpenGL katmanı olmadan doğrudan Vulkan (Android), Metal (iOS) ve Direct3D 12 (Windows) ile çalışır. Bu, birkaç avantaj sağlar: daha düşük sürücü gecikmesi (OpenGL'ye göre %50'ye kadar daha az), GPU belleği üzerinde doğrudan kontrol ve modern özelliklere (döşemeli GPU mimarisi, GPU tabanlı oluşturma) erişim. OpenGL artık gelişmiyor ve mobil cihazlardaki sürücüleri genellikle performans darboğazı haline geliyor.

Mevcut durum ve planlar

Impeller aktif geliştirme aşamasındadır ve Flutter Master ve Beta kanallarında mevcuttur. Flutter 3.16'dan itibaren Impeller, iOS'ta varsayılan olarak etkindir ve Android'de bir yapılandırma bayrağı aracılığıyla isteğe bağlıdır. Skia'nın Impeller ile tamamen değiştirilmesi, 2026'daki kararlı Flutter sürümlerinden birinde beklenmektedir.

iOS: Varsayılan Impeller

iOS'ta Impeller, Metal aracılığıyla çalışır ve Flutter 3.16'dan itibaren varsayılan olarak etkindir. Flutter ekibi, uygulamaları Impeller'da test etmeyi ve sorunları bildirmeyi önerir. Skia'ya dönmek için Info.plist dosyasında Impeller bayrağını kullanın: FlutterEnableImpeller = NO. Flutter Team'e göre, iOS uygulamalarının %92'si görünür gerileme olmadan Impeller'da çalışır ve animasyon performansı %25–40 oranında iyileşir.

Android: İsteğe bağlı

Android'de Impeller, Vulkan aracılığıyla çalışır. Etkinleştirmek için AndroidManifest.xml dosyasına io.flutter.embedded_views_preview meta etiketini ekleyin. Flutter ekibi, Impeller'ı çeşitli GPU mimarileri (Adreno, Mali, PowerVR) için optimize etmeye devam ediyor. Android'deki ana zorluk, Vulkan'ı olmayan cihazları (Android < 7.0 veya eski GPU'lar) desteklemektir. Bu tür cihazlar için Skia tabanlı bir yedek arka uç veya yazılım rasterleştirmeli Impeller kullanılacaktır.

Masaüstü ve Web

Windows'ta Impeller, Direct3D 12 (Flutter Master'da etkin) aracılığıyla çalışır. macOS ve Linux'ta — sırasıyla Metal ve Vulkan aracılığıyla. Impeller, Web için planlanmamıştır çünkü Flutter'ın web sürümü CanvasKit (WebAssembly aracılığıyla Skia) kullanır ve tarayıcıdaki farklı gölgelendirici derleme mekanizması nedeniyle gölgelendirici takılması onun için kritik bir sorun değildir. Web sürümü Skia'yı kullanmaya devam edecektir.

Yol haritası

Google, Impeller yol haritasını yayınladı: 2024 — iOS'ta varsayılan Impeller; 2025 — Android ve Windows'ta varsayılan Impeller; 2026 — Skia'nın Flutter Engine'den tamamen kaldırılması. Bundan sonra Flutter, Impeller'ı tek oluşturma motoru olarak kullanacak ve bu da bakımı basitleştirecek, motor boyutunu küçültecek ve tüm platformlarda performansı iyileştirecektir.

Sıkça Sorulan Sorular

Flutter'da Impeller nasıl etkinleştirilir?

iOS'ta Impeller, Flutter 3.16'dan itibaren varsayılan olarak etkindir. Android'de, AndroidManifest.xml dosyasına io.flutter.embedded_views_preview meta etiketini true değeriyle ekleyin. Windows'ta, başlatırken --enable-impeller bayrağını kullanın. Tüm durumlarda, Dart kodunda FlutterEngine aracılığıyla zorla etkinleştirilebilir.

Skia çalışıyorsa neden değiştirilsin?

Skia çalışır, ancak temel sorunları vardır: gölgelendirici takılması (gölgelendirici derlemede 50–200 ms gecikme), yüksek bellek tüketimi ve OpenGL mimari sınırlamaları. Impeller özellikle Flutter için tasarlanmıştır ve bu sorunları çevrimdışı gölgelendirici derleme ve bellek havuzları aracılığıyla çözer.

Impeller tüm Flutter widgets'larını destekliyor mu?

Evet, Impeller Skia ile aynı Canvas API'yi uygular. Metin, resim, animasyon, özel çizim gibi tüm standart Flutter widgets'ları değişiklik yapılmadan Impeller'da çalışır. Geriye dönük uyumluluk Flutter Engine düzeyinde sağlanır ve geçiş geliştirici için şeffaftır.

Skia ve Impeller aynı anda kullanılabilir mi?

Hayır, bir uygulama aynı anda bir oluşturma motoru kullanır. Seçim, bir bayrak aracılığıyla Flutter Engine başlatılırken yapılır. Uygulama çalışması sırasında Skia ve Impeller arasında geçiş yapmak imkansızdır — oluşturucu, ilk FlutterEngine örneği oluşturulana kadar sabitlenir.

Impeller benimsendikten sonra Skia'ya ne olacak?

Skia, Chrome, Android ve diğer projeler için bağımsız bir Google kitaplığı olarak varlığını sürdürecek. Flutter'da Skia'nın yerini birincil oluşturucu olarak Impeller alacak. Skia, Flutter'ın web sürümü (CanvasKit aracılığıyla) ve Vulkan/Metal desteği olmayan cihazlar için yedek seçenek olarak kalacak.

Özet

  • Impeller — çevrimdışı gölgelendirici derleme yoluyla gölgelendirici takılmasını ortadan kaldıran yeni bir Flutter oluşturma motoru
  • Mimari SPIR-V, önceden derlenmiş ardışık düzenler ve bellek havuzlarına dayanır
  • Skia ile karşılaştırma: ilk oluşturmada gecikme yok, %30–40 bellek azaltma
  • Arka uçlar eski OpenGL olmadan Vulkan, Metal ve Direct3D 12'yi destekler
  • Durum iOS'ta — varsayılan, Android ve Windows'ta — isteğe bağlı (Flutter 3.16+)
  • Uyumluluk tam: mevcut tüm Flutter widgets'ları kod değişikliği olmadan çalışır
  • Kullan yeni Flutter projelerinde Impeller'ı kullanın ve takılmaları ortadan kaldırmak için mevcut projeleri taşıyın

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun