Impeller Flutter के लिए एक आधुनिक रेंडरिंग इंजन है, जिसे Google ने Skia को बदलने और इसकी मूलभूत समस्याओं को हल करने के लिए विकसित किया है: पहले फ्रेम रेंडरिंग के दौरान शेडर जैंक (jank), उच्च मेमोरी खपत, और विभिन्न ग्राफिक्स बैकएंड के समर्थन की जटिलता। Skia के विपरीत, Impeller शेडर्स को पहले से (offline) कंपाइल करता है, SPIR-V को मध्यवर्ती प्रतिनिधित्व के रूप में उपयोग करता है, और सीधे Vulkan, Metal और Direct3D 12 के साथ काम करता है। Flutter Team (2025) के अनुसार, Impeller 95% तक शेडर जैंक को समाप्त करता है, प्रवेश स्तर के उपकरणों पर भी अनुमानित 60 FPS सुनिश्चित करता है।
मुख्य बातें
Impeller C++ में लिखा गया एक ओपन-सोर्स ग्राफिक्स रेंडरिंग इंजन है, जिसे Flutter टीम द्वारा Skia को मुख्य रेंडरर के रूप में बदलने के लिए विकसित किया गया है। इस परियोजना की घोषणा 2021 में शेडर जैंक की लंबे समय से चली आ रही समस्या के जवाब में की गई थी, जिससे Skia ग्रस्त है। Impeller Skia का फोर्क नहीं है — यह पूरी तरह से नया कार्यान्वयन है जो मोबाइल GPU और आधुनिक ग्राफिक्स API की सीमाओं को ध्यान में रखकर डिज़ाइन किया गया है।
Impeller के पीछे मुख्य विचार शेडर कंपाइलेशन को रनटाइम के बजाय एप्लिकेशन बिल्ड चरण में स्थानांतरित करना है। Skia में, शेडर्स पहले उपयोग पर कंपाइल होते हैं, जब उपयोगकर्ता पहले से ही एप्लिकेशन के साथ इंटरैक्ट कर रहा होता है। Impeller सभी शेडर्स को पहले से (offline) कंपाइल करता है, उन्हें SPIR-V बाइनरी प्रारूप में पैकेज करता है, और एप्लिकेशन के साथ भेजता है। रनटाइम पर, Impeller पूर्व-कंपाइल शेडर्स लोड करता है, जिससे कंपाइलेशन में होने वाली देरी समाप्त हो जाती है।
Impeller मेमोरी खपत की समस्या को भी हल करता है। Skia रेंडरिंग के दौरान कई अस्थायी ऑब्जेक्ट (टेक्सचर, बफर) बनाता है, जो सीमित संसाधनों वाले उपकरणों पर मेमोरी फ्रैग्मेंटेशन का कारण बनता है। Impeller मेमोरी पूल का उपयोग करता है और आवंटित संसाधनों का पुन: उपयोग करता है, जिससे पीक मेमोरी खपत 30–40% कम हो जाती है।
SPIR-V (Standard Portable Intermediate Representation) Khronos Group द्वारा विकसित एक मध्यवर्ती शेडर प्रतिनिधित्व है। Impeller सभी शेडर्स के लिए SPIR-V को सार्वभौमिक प्रारूप के रूप में उपयोग करता है। बिल्ड चरण के दौरान, Impeller भाषा (प्रभावों का वर्णन करने के लिए एक कस्टम C++ DSL) में लिखे शेडर्स SPIR-V में कंपाइल होते हैं। रनटाइम पर, SPIR-V लोड होता है और प्लेटफ़ॉर्म-विशिष्ट प्रारूप में अनुवादित होता है — Metal के लिए MSL, Vulkan के लिए GLSL, या Direct3D 12 के लिए DXIL।
Impeller की आर्किटेक्चर कई परतों से बनी है, जिनमें से प्रत्येक एक कड़ाई से परिभाषित कार्य करती है: रेंडरिंग कमांड सूची का प्रसंस्करण, GPU संसाधनों का प्रबंधन, और शेडर्स का निष्पादन। यह मॉड्यूलरिटी नए ग्राफिक्स API के लिए समर्थन जोड़ना आसान बनाती है।
निचली परत ग्राफिक्स API (Vulkan, Metal, Direct3D 12) पर एक अमूर्तन है। Impeller OpenGL का समर्थन नहीं करता, क्योंकि OpenGL कुशल ऑफलाइन शेडर कंपाइलेशन के लिए क्षमताएँ प्रदान नहीं करता। इस स्तर पर कार्यान्वित हैं: वर्टेक्स बफर प्रबंधन, पाइपलाइन निर्माण और कैशिंग, GPU सिंक्रनाइज़ेशन। Impeller में एक पाइपलाइन एक पूर्व-कंपाइल GPU स्थिति है जिसमें शेडर्स, रास्टराइज़ेशन सेटिंग्स और ब्लेंडिंग शामिल हैं। सभी पाइपलाइन इनिशियलाइज़ेशन चरण के दौरान बनाई जाती हैं, जिससे रेंडरिंग के दौरान कंपाइलेशन समाप्त हो जाता है।
मध्य परत एक संसाधन प्रबंधन प्रणाली है। यह GPU संसाधनों को आवंटित और पुन: उपयोग करती है: टेक्सचर, बफर, सैंपलर। हर फ्रेम पर नया टेक्सचर बनाने के बजाय, Impeller विभिन्न आकारों और प्रारूपों के टेक्सचर का एक पूल रखता है। मेमोरी पूल स्वचालित रूप से अप्रयुक्त संसाधनों को वापस करता है और आवश्यकता होने पर विस्तार कर सकता है, लेकिन Skia की विशेषता वाले फ्रैग्मेंटेशन के बिना।
शीर्ष परत रेंडरिंग ग्राफ है, जिसमें Flutter Engine Canvas API कमांड को परिवर्तित करता है। Impeller एक डिस्प्ले लिस्ट प्राप्त करता है और उससे संचालन निर्भरता ग्राफ बनाता है। ग्राफ को अनुकूलित किया जाता है: अनावश्यक रेंडर पास हटा दिए जाते हैं, समान GPU स्थिति वाले संचालन मर्ज कर दिए जाते हैं। फिर ग्राफ को पूर्व-निर्मित पाइपलाइनों का उपयोग करके Vulkan/Metal कॉल के अनुक्रम में कंपाइल किया जाता है।
प्रत्येक फ्रेम एक निश्चित पाइपलाइन से गुजरता है: डिस्प्ले लिस्ट → रेंडरिंग ग्राफ → ग्राफ कंपाइलेशन → GPU कमांड सबमिशन। पोस्ट-इफेक्ट्स (धुंधलापन, छाया) या डेप्थ बफर तैयारी के लिए अतिरिक्त पास जोड़े जा सकते हैं। Impeller में फ्रेम समय Skia की तुलना में अधिक अनुमानित है, क्योंकि शेडर कंपाइलेशन में कोई अनिश्चित देरी नहीं होती।
Impeller और Skia की तुलना रेंडरिंग दृष्टिकोण में अंतर दिखाती है। Skia एक सामान्य-उद्देश्य 2D लाइब्रेरी है, जबकि Impeller Flutter के लिए एक विशेष इंजन है, जो मोबाइल UI आवश्यकताओं के लिए अनुकूलित है।
| पैरामीटर | Skia | Impeller |
|---|---|---|
| शेडर्स | रनटाइम कंपाइलेशन | ऑफलाइन कंपाइलेशन (बिल्ड टाइम) |
| शेडर जैंक | पहले फ्रेम पर 50–200 मि.से. | अनुपस्थित (0 मि.से.) |
| शेडर प्रारूप | स्वामित्व (SkSL) | SPIR-V (सार्वभौमिक) |
| GPU बैकएंड | OpenGL, Vulkan, Metal | Vulkan, Metal, Direct3D 12 |
| मेमोरी खपत | उच्च (अस्थायी टेक्सचर) | मेमोरी पूल, -40% तक |
| प्लेटफ़ॉर्म | Android, iOS, Web, डेस्कटॉप | Android, iOS, डेस्कटॉप |
| स्थिति | स्थिर (मुख्य) | पूर्वावलोकन (Skia को बदलना) |
मुख्य अंतर शेडर्स का दृष्टिकोण है। Skia उपयोग के समय शेडर्स को कंपाइल करता है, पहली बार अपरिचित प्रभावों को रेंडर करते समय शेडर जैंक पैदा करता है। Impeller ऑफलाइन कंपाइलेशन के माध्यम से इसे समाप्त करता है। साथ ही, Skia OpenGL का समर्थन करता है, जो Flutter के वेब संस्करण के लिए आवश्यक है, लेकिन Impeller अधिक आधुनिक API के पक्ष में OpenGL को छोड़ देता है, जो मोबाइल उपकरणों पर बेहतर प्रदर्शन देता है।
Flutter एप्लिकेशन के लिए, Impeller पर स्विच करने के लिए कोड बदलने की आवश्यकता नहीं है। Impeller वही Canvas API लागू करता है जो Skia करता है, इसलिए सभी विजेट, एनिमेशन और कस्टम पेंटिंग समान रूप से काम करते हैं। पिछड़ी संगतता Flutter Engine स्तर पर सुनिश्चित की जाती है — इंजन एप्लिकेशन इनिशियलाइज़ेशन चरण पर रेंडरर (Skia या Impeller) चुनता है।
Impeller Skia की तुलना में कई मापने योग्य लाभ प्रदान करता है जो सीधे उपयोगकर्ता अनुभव और Flutter एप्लिकेशन प्रदर्शन को प्रभावित करते हैं।
शेडर जैंक Skia की मुख्य समस्या है जिसे Impeller पूरी तरह से हल करता है। जब कोई Flutter एप्लिकेशन ग्रेडिएंट्स, मास्क या गैर-मानक ब्लेंड वाली नई स्क्रीन प्रदर्शित करता है, तो Skia एनिमेशन के दौरान शेडर्स कंपाइल करता है, जिससे फ्रेम ड्रॉप होते हैं। Impeller बिल्ड चरण पर सभी शेडर्स कंपाइल करता है, इसलिए पहला फ्रेम उतनी ही तेज़ी से रेंडर होता है जितने कि बाद के फ्रेम। धीमी GPU (MediaTek Helio, Qualcomm 400 series) वाले उपकरणों पर, अंतर विशेष रूप से ध्यान देने योग्य है — Skia में प्रत्येक नए प्रभाव प्रकार के लिए 200 मि.से. तक की देरी बनाम Impeller में 0 मि.से.
Impeller GPU मेमोरी प्रबंधन के लिए संसाधन पूल का उपयोग करता है। Skia में, प्रत्येक फ्रेम अस्थायी सतहों के लिए नए टेक्सचर बना सकता है, विशेष रूप से पारदर्शिता के साथ रेंडर करते समय या saveLayer का उपयोग करते समय। Impeller फ्रेमों के बीच टेक्सचर का पुन: उपयोग करता है, जिससे Android पर पीक मेमोरी खपत 30–40% और iOS पर 25% तक कम हो जाती है। यह लंबी सूचियों और एनिमेशन वाले एप्लिकेशन के लिए विशेष रूप से महत्वपूर्ण है, जहाँ Skia 2 GB RAM वाले उपकरणों पर OOM त्रुटियाँ पैदा कर सकता था।
Skia में, फ्रेम रेंडरिंग समय इस बात पर निर्भर करता है कि कौन से शेडर्स पहले ही कंपाइल हो चुके हैं। नए प्रभाव वाला पहला फ्रेम 50–200 मि.से. ले सकता है, जबकि बाद के फ्रेम 3–5 मि.से. लेते हैं। यह अनुमानितता की कमी अनुकूलन और परीक्षण को कठिन बनाती है। Impeller एक समान फ्रेम समय सुनिश्चित करता है, क्योंकि सभी शेडर्स पहले से कंपाइल हैं और मेमोरी आवंटन अनुमानित है। Impeller के साथ Flutter Engine प्रत्येक फ्रेम के लिए समय बजट की अधिक सटीक गणना कर सकता है।
Impeller बिना OpenGL परत के, सीधे Vulkan (Android), Metal (iOS) और Direct3D 12 (Windows) के साथ काम करता है। यह कई लाभ प्रदान करता है: कम ड्राइवर विलंबता (OpenGL की तुलना में 50% तक कम), GPU मेमोरी पर सीधा नियंत्रण, और आधुनिक सुविधाओं तक पहुँच (टाइल्ड GPU आर्किटेक्चर, GPU-संचालित रेंडरिंग)। OpenGL अब विकसित नहीं हो रहा है, और मोबाइल उपकरणों पर इसके ड्राइवर अक्सर प्रदर्शन की बाधा बन जाते हैं।
Impeller सक्रिय विकास के अधीन है और Flutter Master और Beta चैनलों में उपलब्ध है। Flutter 3.16 से शुरू होकर, Impeller iOS पर डिफ़ॉल्ट रूप से सक्षम है, और Android पर कॉन्फ़िगरेशन फ़्लैग के माध्यम से वैकल्पिक रूप से। 2026 में Flutter के एक स्थिर रिलीज़ में Skia के पूर्ण प्रतिस्थापन की उम्मीद है।
iOS पर, Impeller Metal के माध्यम से काम करता है और Flutter 3.16 से डिफ़ॉल्ट रूप से सक्षम है। Flutter टीम Impeller पर एप्लिकेशन का परीक्षण करने और समस्याओं की रिपोर्ट करने की सलाह देती है। Skia पर वापस जाने के लिए, Info.plist फ़ाइल में Impeller फ़्लैग का उपयोग करें: FlutterEnableImpeller = NO। Flutter Team के अनुसार, 92% iOS एप्लिकेशन बिना दृश्य प्रतिगमन के Impeller पर चलते हैं, और एनिमेशन प्रदर्शन 25–40% में सुधार होता है।
Android पर, Impeller Vulkan के माध्यम से काम करता है। इसे सक्षम करने के लिए, AndroidManifest.xml में मेटा-टैग io.flutter.embedded_views_preview जोड़ें। Flutter टीम विभिन्न GPU आर्किटेक्चर (Adreno, Mali, PowerVR) के लिए Impeller को अनुकूलित करना जारी रखती है। Android पर मुख्य चुनौती Vulkan के बिना उपकरणों (Android < 7.0 या पुराने GPU) का समर्थन करना है। ऐसे उपकरणों के लिए, Skia पर फ़ॉलबैक बैकएंड या सॉफ़्टवेयर रास्टराइज़ेशन के साथ Impeller का उपयोग किया जाएगा।
Windows पर, Impeller Direct3D 12 (Flutter Master में सक्षम) के माध्यम से काम करता है। macOS और Linux पर — क्रमशः Metal और Vulkan के माध्यम से। वेब के लिए Impeller की योजना नहीं है, क्योंकि Flutter का वेब संस्करण CanvasKit (WebAssembly के माध्यम से Skia) का उपयोग करता है, और ब्राउज़र में शेडर कंपाइलेशन के एक अलग तंत्र के कारण शेडर जैंक इसके लिए एक महत्वपूर्ण समस्या नहीं है। वेब संस्करण Skia का उपयोग जारी रखेगा।
Google ने Impeller रोडमैप प्रकाशित किया है: 2024 — iOS पर डिफ़ॉल्ट रूप से Impeller; 2025 — Android और Windows पर डिफ़ॉल्ट रूप से Impeller; 2026 — Flutter Engine से Skia का पूर्ण निष्कासन। उसके बाद, Flutter Impeller का उपयोग एकमात्र रेंडरिंग इंजन के रूप में करेगा, जो रखरखाव को सरल करेगा, इंजन के आकार को कम करेगा और सभी प्लेटफ़ॉर्म पर प्रदर्शन में सुधार करेगा।
अक्सर पूछे जाने वाले प्रश्न
iOS पर, Impeller Flutter 3.16 से डिफ़ॉल्ट रूप से सक्षम है। Android पर, AndroidManifest.xml में मेटा-टैग io.flutter.embedded_views_preview को true मान के साथ जोड़ें। Windows पर, लॉन्च करते समय --enable-impeller फ़्लैग का उपयोग करें। सभी मामलों में, Dart कोड में FlutterEngine के माध्यम से इसे强制 रूप से सक्षम किया जा सकता है।
Skia काम करता है, लेकिन इसमें मूलभूत समस्याएँ हैं: शेडर जैंक (शेडर कंपाइलेशन में 50–200 मि.से. देरी), उच्च मेमोरी खपत, और OpenGL आर्किटेक्चर सीमाएँ। Impeller विशेष रूप से Flutter के लिए डिज़ाइन किया गया है और ऑफलाइन शेडर कंपाइलेशन और मेमोरी पूल के माध्यम से इन समस्याओं को हल करता है।
हाँ, Impeller वही Canvas API लागू करता है जो Skia करता है। सभी मानक Flutter विजेट — टेक्स्ट, इमेज, एनिमेशन, कस्टम पेंट — बिना बदलाव के Impeller पर काम करते हैं। पिछड़ी संगतता Flutter Engine स्तर पर सुनिश्चित की जाती है, और संक्रमण डेवलपर के लिए पारदर्शी है।
नहीं, एक एप्लिकेशन एक समय में एक रेंडरिंग इंजन का उपयोग करता है। चयन एक फ़्लैग के माध्यम से Flutter Engine को इनिशियलाइज़ करते समय किया जाता है। रनटाइम के दौरान Skia और Impeller के बीच स्विच करना असंभव है — रेंडरर पहले FlutterEngine इंस्टेंस बनने तक स्थिर रहता है।
Skia Chrome, Android और अन्य परियोजनाओं के लिए एक स्वतंत्र Google लाइब्रेरी के रूप में अस्तित्व में रहेगा। Flutter में, Skia को Impeller द्वारा मुख्य रेंडरर के रूप में बदल दिया जाएगा। Skia Flutter के वेब संस्करण (CanvasKit के माध्यम से) और Vulkan/Metal समर्थन के बिना उपकरणों के लिए एक फ़ॉलबैक विकल्प के रूप में रहेगा।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।