Impeller: konsep kunci, arsitektur, dan keunggulan

Penulis: IT Sectr Diterbitkan: 2026-06-04 Waktu membaca: 9 mnt

Impeller adalah mesin rendering modern untuk Flutter, dikembangkan oleh Google untuk menggantikan Skia dan mengatasi masalah fundamentalnya: lag shader (jank) saat rendering frame pertama, konsumsi memori yang tinggi, dan kesulitan mendukung backend grafis yang berbeda. Tidak seperti Skia, Impeller mengompilasi shader terlebih dahulu (offline), menggunakan SPIR-V sebagai representasi perantara, dan bekerja langsung dengan Vulkan, Metal, dan Direct3D 12. Menurut data dari Flutter Team (2025), Impeller menghilangkan hingga 95% lag shader, memberikan 60 FPS yang dapat diprediksi bahkan pada perangkat kelas entry-level.

Poin utama

  • Impeller — mesin rendering Flutter baru yang menggantikan Skia
  • Kompilasi offline shader menghilangkan shader jank pada rendering pertama
  • Arsitektur menggunakan SPIR-V sebagai representasi perantara universal
  • Backend Impeller bekerja langsung dengan Vulkan, Metal, dan Direct3D 12
  • Performa dapat diprediksi berkat pemrosesan awal semua shader

Apa itu Impeller?

Impeller — adalah mesin rendering grafis sumber terbuka yang ditulis dalam C++, yang dikembangkan oleh tim Flutter untuk menggantikan Skia sebagai renderer utama. Proyek ini diumumkan pada tahun 2021 sebagai respons terhadap masalah shader jank yang sudah berlangsung lama yang dialami Skia. Impeller bukanlah fork dari Skia — ini adalah implementasi yang sepenuhnya baru, dirancang dengan mempertimbangkan keterbatasan GPU mobile dan API grafis modern.

Ide utama Impeller adalah memindahkan kompilasi shader ke tahap pembangunan (build) aplikasi, bukan saat runtime. Di Skia, shader dikompilasi saat penggunaan pertama, ketika pengguna sudah berinteraksi dengan aplikasi. Impeller mengompilasi semua shader terlebih dahulu (offline), mengemasnya ke dalam format biner SPIR-V, dan mengirimkannya bersama aplikasi. Saat runtime, Impeller memuat shader yang telah dikompilasi sebelumnya, yang menghilangkan penundaan terkait kompilasi.

Impeller juga memecahkan masalah konsumsi memori. Skia membuat banyak objek sementara (tekstur, buffer) dalam proses rendering, yang menyebabkan fragmentasi memori pada perangkat dengan sumber daya terbatas. Impeller menggunakan kumpulan memori (memory pools) dan menggunakan kembali sumber daya yang telah dialokasikan, mengurangi konsumsi memori puncak sebesar 30–40%.

SPIR-V sebagai dasar

SPIR-V (Standard Portable Intermediate Representation) — adalah representasi perantara shader yang dikembangkan oleh Khronos Group. Impeller menggunakan SPIR-V sebagai format universal untuk semua shader. Pada tahap build, shader dalam bahasa Impeller (DSL C++ khusus untuk mendeskripsikan efek) dikompilasi ke SPIR-V. Saat runtime, SPIR-V dimuat dan diterjemahkan ke format khusus platform — MSL untuk Metal, GLSL untuk Vulkan, atau DXIL untuk Direct3D 12.

Bagaimana cara kerja Impeller?

Arsitektur Impeller terdiri dari beberapa lapisan, masing-masing menjalankan tugas yang ditentukan secara ketat: pemrosesan daftar perintah rendering, pengelolaan sumber daya GPU, dan eksekusi shader. Modularitas ini memungkinkan penambahan dukungan untuk API grafis baru dengan mudah.

Lapisan bawah — adalah abstraksi di atas API grafis (Vulkan, Metal, Direct3D 12). Impeller tidak mendukung OpenGL, karena OpenGL tidak menyediakan kemampuan untuk kompilasi offline shader yang efisien. Pada tingkat ini diimplementasikan: pengelolaan buffer vertex, pembuatan dan caching pipeline (jalur pipa grafis), sinkronisasi GPU. Pipeline di Impeller — adalah status GPU yang telah dikompilasi sebelumnya yang mencakup shader, pengaturan rasterisasi, dan blending. Semua pipeline dibuat pada tahap inisialisasi, yang menghilangkan kompilasi selama rendering.

Lapisan tengah — adalah sistem manajemen sumber daya. Ia mengalokasikan dan menggunakan kembali sumber daya GPU: tekstur, buffer, sampler. Alih-alih membuat tekstur baru setiap frame, Impeller mempertahankan kumpulan tekstur dengan berbagai ukuran dan format. Kumpulan memori secara otomatis mengembalikan sumber daya yang tidak digunakan dan dapat diperluas sesuai kebutuhan, tetapi tanpa fragmentasi yang menjadi ciri khas Skia.

Lapisan atas — adalah graf rendering tempat Flutter Engine mengubah perintah Canvas API. Impeller menerima Display List (daftar perintah menggambar) dan membangun graf ketergantungan operasi darinya. Graf dioptimalkan: jalur rendering yang tidak perlu dihapus, operasi dengan status GPU yang sama digabungkan. Kemudian graf dikompilasi menjadi serangkaian panggilan Vulkan/Metal menggunakan pipeline yang telah dibuat sebelumnya.

Alur eksekusi frame di Impeller

Setiap frame melewati jalur tetap: Display List → graf rendering → kompilasi graf → pengiriman perintah GPU. Jalur tambahan dapat ditambahkan untuk efek pasca-pemrosesan (blur, bayangan) atau persiapan buffer kedalaman. Waktu frame di Impeller lebih dapat diprediksi daripada di Skia, karena tidak ada penundaan non-deterministik untuk kompilasi shader.

Impeller vs Skia: perbandingan

Perbandingan Impeller dan Skia menunjukkan perbedaan dalam pendekatan rendering. Skia — adalah pustaka 2D universal untuk keperluan umum, sementara Impeller — adalah mesin khusus untuk Flutter, dioptimalkan untuk kebutuhan UI mobile.

ParameterSkiaImpeller
ShaderKompilasi saat runtimeKompilasi offline (build time)
Shader jank50–200 ms untuk frame pertamaTidak ada (0 ms)
Format shaderProprieter (SkSL)SPIR-V (universal)
Backend GPUOpenGL, Vulkan, MetalVulkan, Metal, Direct3D 12
Konsumsi memoriTinggi (tekstur sementara)Kumpulan memori, hingga -40%
PlatformAndroid, iOS, Web, DesktopAndroid, iOS, Desktop
StatusStabil (utama)Preview (menggantikan Skia)

Perbedaan utama — pendekatan terhadap shader. Skia mengompilasi shader pada saat penggunaan, menciptakan shader jank pada rendering pertama efek yang tidak dikenal. Impeller menghilangkan ini melalui kompilasi offline. Skia juga mendukung OpenGL, yang diperlukan untuk versi web Flutter, tetapi Impeller meninggalkan OpenGL demi API yang lebih modern, yang memberikan performa lebih baik pada perangkat mobile.

Kompatibilitas dengan kode Flutter yang ada

Untuk aplikasi Flutter, peralihan ke Impeller tidak memerlukan perubahan kode. Impeller mengimplementasikan Canvas API yang sama dengan Skia, sehingga semua widget, animasi, dan gambar kustom berfungsi sama. Kompatibilitas mundur dijamin pada tingkat Flutter Engine — mesin memilih renderer (Skia atau Impeller) pada tahap inisialisasi aplikasi.

Keunggulan Impeller

Impeller memberikan beberapa keunggulan terukur dibandingkan Skia yang secara langsung memengaruhi pengalaman pengguna dan performa aplikasi Flutter.

Eliminasi shader jank

Shader jank — masalah utama Skia yang dipecahkan sepenuhnya oleh Impeller. Ketika aplikasi Flutter menampilkan layar baru dengan gradien, mask, atau blend tidak standar, Skia mengompilasi shader selama animasi, yang menyebabkan frame terlewat. Impeller mengompilasi semua shader pada tahap build, sehingga frame pertama dirender sama cepatnya dengan frame berikutnya. Pada perangkat dengan GPU lambat (MediaTek Helio, Qualcomm 400 series) perbedaannya sangat terlihat — hingga 200 ms penundaan untuk setiap jenis efek baru di Skia dibandingkan 0 ms di Impeller.

Pengurangan konsumsi memori

Impeller menggunakan kumpulan sumber daya untuk mengelola memori GPU. Di Skia, setiap frame dapat membuat tekstur baru untuk permukaan sementara, terutama saat rendering dengan transparansi atau menggunakan saveLayer. Impeller menggunakan kembali tekstur antar frame, yang mengurangi konsumsi memori puncak sebesar 30–40% di Android dan hingga 25% di iOS. Ini sangat penting untuk aplikasi dengan daftar panjang dan animasi, di mana Skia dapat menyebabkan kesalahan OOM pada perangkat dengan RAM 2 GB.

Performa yang dapat diprediksi

Di Skia, waktu rendering frame dapat bervariasi tergantung pada shader mana yang telah dikompilasi. Frame pertama dengan efek baru dapat memakan waktu 50–200 ms, sementara frame berikutnya — 3–5 ms. Ketidakpastian ini mempersulit optimasi dan pengujian. Impeller memastikan waktu frame yang seragam karena semua shader sudah dikompilasi dan alokasi memori dapat diprediksi. Flutter Engine dengan Impeller dapat menghitung anggaran waktu untuk setiap frame dengan lebih akurat.

Dukungan untuk API grafis modern

Impeller bekerja langsung dengan Vulkan (Android), Metal (iOS), dan Direct3D 12 (Windows), tanpa lapisan OpenGL. Ini memberikan beberapa keunggulan: latensi driver yang lebih rendah (hingga 50% lebih sedikit dibandingkan melalui OpenGL), kontrol langsung atas memori GPU, dan akses ke kemampuan modern (arsitektur GPU berbasis tile, GPU-driven rendering). OpenGL tidak lagi dikembangkan dan driver-nya pada perangkat mobile sering menjadi hambatan performa.

Status saat ini dan rencana

Impeller sedang dalam pengembangan aktif dan tersedia di saluran Flutter Master dan Beta. Mulai Flutter 3.16, Impeller diaktifkan secara default di iOS, dan di Android — opsional melalui flag konfigurasi. Penggantian penuh Skia dengan Impeller diharapkan dalam salah satu rilis stabil Flutter tahun 2026.

iOS: Impeller default

Di iOS, Impeller bekerja melalui Metal dan diaktifkan secara default sejak Flutter 3.16. Tim Flutter merekomendasikan pengujian aplikasi di Impeller dan melaporkan masalah. Untuk kembali ke Skia, gunakan flag Impeller di file Info.plist: FlutterEnableImpeller = NO. Menurut data Flutter Team, 92% aplikasi di iOS berjalan di Impeller tanpa regresi yang terlihat, dan performa animasi meningkat 25–40%.

Android: opsional

Di Android, Impeller bekerja melalui Vulkan. Untuk mengaktifkannya, tambahkan meta-tag di AndroidManifest.xml: io.flutter.embedded_views_preview. Tim Flutter terus mengoptimalkan Impeller untuk berbagai arsitektur GPU (Adreno, Mali, PowerVR). Tantangan utama di Android adalah dukungan untuk perangkat tanpa Vulkan (Android < 7.0 atau GPU lama). Untuk perangkat semacam itu, akan digunakan backend cadangan di Skia atau Impeller dengan rasterisasi perangkat lunak.

Desktop dan Web

Di Windows, Impeller bekerja melalui Direct3D 12 (diaktifkan di Flutter Master). Di macOS dan Linux — masing-masing melalui Metal dan Vulkan. Untuk Web, Impeller tidak direncanakan, karena versi web Flutter menggunakan CanvasKit (Skia melalui WebAssembly), dan shader jank bukanlah masalah kritis karena mekanisme kompilasi shader yang berbeda di browser. Versi web akan terus menggunakan Skia.

Peta jalan

Google telah menerbitkan peta jalan Impeller: 2024 — Impeller default di iOS; 2025 — Impeller default di Android dan Windows; 2026 — penghapusan total Skia dari Flutter Engine. Setelah itu, Flutter akan menggunakan Impeller sebagai satu-satunya mesin rendering, yang akan menyederhanakan dukungan, mengurangi ukuran mesin, dan meningkatkan performa di semua platform.

Pertanyaan yang sering diajukan

Bagaimana cara mengaktifkan Impeller di Flutter?

Di iOS, Impeller diaktifkan secara default sejak Flutter 3.16. Di Android, tambahkan meta-tag io.flutter.embedded_views_preview dengan nilai true di AndroidManifest.xml. Di Windows, gunakan flag --enable-impeller saat menjalankan. Dalam semua kasus, dapat diaktifkan secara paksa melalui FlutterEngine di kode Dart.

Mengapa mengganti Skia jika sudah berfungsi?

Skia berfungsi, tetapi memiliki masalah fundamental: shader jank (50–200 ms penundaan untuk kompilasi shader), konsumsi memori tinggi, dan keterbatasan arsitektur OpenGL. Impeller dirancang khusus untuk Flutter dan mengatasi masalah ini melalui kompilasi offline shader dan kumpulan memori.

Apakah Impeller mendukung semua widget Flutter?

Ya, Impeller mengimplementasikan Canvas API yang sama dengan Skia. Semua widget standar Flutter — teks, gambar, animasi, paint kustom — berfungsi di Impeller tanpa perubahan. Kompatibilitas mundur dijamin pada tingkat Flutter Engine dan transisi ini transparan bagi pengembang.

Bisakah Skia dan Impeller digunakan secara bersamaan?

Tidak, aplikasi menggunakan satu mesin rendering pada satu waktu. Pemilihan dilakukan saat inisialisasi Flutter Engine melalui flag. Peralihan antara Skia dan Impeller selama runtime aplikasi tidak mungkin — renderer ditetapkan sebelum instance pertama FlutterEngine dibuat.

Apa yang akan terjadi pada Skia setelah implementasi Impeller?

Skia akan terus ada sebagai pustaka independen Google untuk Chrome, Android, dan proyek lainnya. Di Flutter, Skia akan digantikan oleh Impeller sebagai renderer utama. Skia akan tetap digunakan untuk versi web Flutter (melalui CanvasKit) dan sebagai opsi cadangan untuk perangkat tanpa dukungan Vulkan/Metal.

Ringkasan

  • Impeller — mesin rendering Flutter baru yang menghilangkan shader jank melalui kompilasi offline shader
  • Arsitektur berbasis SPIR-V, pipeline yang telah dikompilasi sebelumnya, dan kumpulan memori
  • Perbandingan dengan Skia: tanpa penundaan pada rendering pertama, pengurangan memori 30–40%
  • Backend mendukung Vulkan, Metal, dan Direct3D 12 tanpa OpenGL yang usang
  • Status di iOS — default, di Android dan Windows — opsional (Flutter 3.16+)
  • Kompatibilitas penuh: semua widget Flutter yang ada berfungsi tanpa perubahan kode
  • Gunakan Impeller di proyek Flutter baru dan migrasikan yang sudah ada untuk menghilangkan lag

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga