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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।