Hot Restart হল একটি প্রক্রিয়া যা ডেভেলপমেন্টের সময় একটি মোবাইল অ্যাপ্লিকেশন দ্রুত রিলোড করে, যেখানে অ্যাপ্লিকেশনটি আপডেটেড সোর্স কোড সহ সম্পূর্ণ পুনরায় শুরু হয়। সম্পূর্ণ পুনর্বিন্যাস হতে ভিন্ন, Hot Restart ইতিমধ্যেই কম্পাইল করা বাইনারি কোড ব্যবহার করে এবং শুধুমাত্র Dart VM রিলোড করে, ডেভেলপমেন্ট চক্রের সময় হ্রাস করে। Flutter ডকুমেন্টেশন (2025) অনুযায়ী, একটি সাধারণ Hot Restart এ 1 থেকে 3 সেকেন্ড সময় লাগে। Hot Restart বিশেষ করে উপযোগী যখন অ্যাপ্লিকেশনের গ্লোবাল অবস্থা এবং ইনিশিয়ালাইজেশন কোড পরিবর্তন করা হয়।
মূখ্য বিষয়সমূহ
Hot Restart হল একটি ডেভেলপমেন্ট প্রক্রিয়া যেখানে সম্পূর্ণ প্রকল্প পুনর্বিন্যাসের প্রয়োজন ছাড়াই অ্যাপ্লিকেশনটি আপডেটেড সোর্স কোড সহ সম্পূর্ণ রূপে রিলোড হয়। ডেভেলপার কোডে পরিবর্তন করে, ফাইল সেভ করে, এবং IDE এর মাধ্যমে পুনরায়শুরু করার আদেশ প্রেরণ করে। অ্যাপ্লিকেশনটি পরিবর্তিত ফাইলগুলি পুনর্বিন্যাস করে, Dart VM পুনরায়শুরু করে, এবং main থেকে যূজার ইন্টারফেসের চুড়ান্ত রেন্ডারিং পর্যন্ত সম্পূর্ণ জীবন চক্র অতিক্রম করে।
Hot Restart সম্পূর্ণ পুনর্নির্মাণ থেকে এই ব্যাপারে আলাদা যে এটি ইতিমধ্যেই কম্পাইল করা বাইনারি লাইব্রেরি এবং Flutter ফ্রেমওয়ার্ক ব্যবহার করে নেটিভ রেপার পুনর্বিন্যাস না করে। এটি ডেভেলপমেন্ট চক্রের সময় বেশ কয়েকটি মিনিট থেকে বেশ কয়েকটি সেকেন্ডে হ্রাস করে। Flutter ডেভেলপার জরিপ (2024) অনুযায়ী, গড় Hot Restart সময় 2.1 সেকেন্ড, যা flutter build কমান্ডের মাধ্যমে সম্পূর্ণ প্রকল্প পুনর্নির্মাণ থেকে প্রায় 97% দ্রুততর।
প্রক্রিয়াটি বিশেষ করে যূজার ইন্টারফেস ডেভেলপমেন্টে চাহিদাশীল যেখানে দৃশ্য পরিবর্তনযার ঘন পরীক্ষা প্রয়োজন। ডেভেলপার একটি উপাদানের রঙ, আকার বা অবস্থান পরিবর্তন করতে পারে এবং দীর্ঘ কম্পাইলেশনে ডেভেলপমেন্ট প্রাসঙ্গিকতা না হারিয়ে সিমুলেটার বা ভৌতিক ডিভাইসে তাত্ক্ষণিক ফলাফল দেখতে পারে। এটি পুনরাবৃত্তি প্রোটোটাইপিংকে আমূল দ্রুত করে।
Hot Restart কমান্ড করার সময়, অপারেশনের একটি ধারাবাহিক ঘটে: পরিবর্তিত ফাইল সেভ করা, পরিবর্তিত Dart ফাইল মশিন কোডে ইন্ক্রিমেন্টাল কম্পাইলেশন, Dart VM পুনরায়শুরু এবং অ্যাপ্লিকেশন প্রবেশ বিন্দুর পুনরায় নিষ্পাদন। Dart VM হল একটি ভার্চুয়াল মশিন যা ডেভেলপমেন্টের সময় JIT (Just-In-Time) মোডে এবং প্রোডাক্শন বিল্ডে AOT (Ahead-Of-Time) মোডে Dart কোড নিষ্পাদন করে।
Hot Restart এর সময়, অ্যাপ্লিকেশন একটি সম্পূর্ণ জীবন চক্র অতিক্রম করে: main ফাঙ্কশন কল করা, WidgetsFlutterBinding ইনিশিয়ালাইজ করা, runApp চালু করা এবং শুন্য থেকে সম্পূর্ণ ওয়িজেট ট্রি তৈরি করা। পূর্ববর্তী সকল ওয়িজেট অবস্থা, ভেরিয়েবল এবং ক্যাশ পরিষ্কার করা হয়। এটি গারন্টি দেয় যে অ্যাপ্লিকেশনটি একটি পরিষ্কার অবস্থায় আছে, যা ডিভাইসে নতুন ইনস্টলেশনের পর অবস্থার সমান।
প্রক্রিয়াটি ধাপগুলির একটি ধারাবাহিক হিসাবে প্রদর্শন করা যেতে পারে: ডেভেলপার IDE এ Hot Restart বটন টিপে, Flutter টুলিং ডিভাইসে একটি আদেশ প্রেরণ করে, ডিভাইসটি বর্তমান অ্যাপ্লিকেশন কঢামো সেভ করে, নতুন কোড সহ Dart VM পুনরায়শুরু করে এবং main পুনরায় চালু করে। ডিপেন্ডেন্সি ইনজেক্শন কন্টেনারে পঞ্জীকৃত সকল নির্ভরতা শুন্য থেকে পুনরায় তৈরি করা হয়।
একটি মূখ্য বৈশিষ্ট্য হল যে নেটিভ শেলের (প্লাগইন, Kotlin কোড, Swift কোড) বাইনারি কোড পুনর্বিন্যাস করা হয় না। Hot Restart কেবল অ্যাপ্লিকেশনের Dart স্তরকে প্রভাবিত করে, যা পুনরায়শুরুর উচ্চ গতি নিশ্চিত করে। যদি পরিবর্তন নেটিভ কোডকে প্রভাবিত করে, তবে সম্পূর্ণ flutter build প্রয়োজন।
Flutter একটি আর্কিটেক্চার ব্যবহার করে যেখানে Dart কোড Dart VM এ চলে এবং UI Skia বা Impeller ইঞ্জিনের মাধ্যমে রেন্ডার হয়। Hot Restart এর সময়, Flutter টুলিং Dart VM এর একটি পৃথক উদাহরণ (isolate) পুনরায়শুরু করে, আপডেটেড .dill ফাইল (Dart Intermediate Language) লোড করে, এবং main ফাঙ্কশন পুনরায় চালায়। সম্পূর্ণ UI runApp কলের মাধ্যমে শুন্য থেকে পুনর্নির্মিত হয়, যা গারন্টি দেয় যে সকল ওয়িজেট হালনাগাদো আপটোডেট।
import 'package:flutter/material.dart';
void main() {
// Hot Restart এর পর, এই ফাঙ্কশনটি আবার চলে
var prefs = await SharedPreferences.getInstance();
var themeMode = prefs.getString('theme') ?? 'light';
runApp(MyApp(themeMode: themeMode));
}
Hot Restart এবং Hot Reload হল দুটি দ্রুত ডেভেলপমেন্ট প্রক্রিয়া যা প্রায়ই দিব্দান্তি করা হয়। Hot Reload বর্তমান অবস্থা না হারিয়ে চলমান অ্যাপ্লিকেশনে পরিবর্তন লোড করে, যেখানে Hot Restart অ্যাপ্লিকেশনটি সম্পূর্ণ পুনরায়শুরু করে। Hot Reload দ্রুত কাজ করে (0.1–1 সেকেন্ড) কিন্তু ইনিশিয়ালাইজেশন বা স্টেটিক ক্লাস ফিল্ডকে প্রভাবিত করে না।
প্রধান পার্থক্য হল অ্যাপ্লিকেশন অবস্থা। Hot Reload ওয়িজেটের বর্তমান অবস্থা সংরক্ষণ করে: স্ক্রল অবস্থান, প্রবেশ করা ডেটা, খোলা মোডাল ওয়িন্ডো। Hot Restart সকল অবস্থা প্রারম্ভিকে রিসেট করে। যদি পরিবর্তন কেবল build পদ্ধতিতে কোডকে প্রভাবিত করে, তবে Hot Reload যথেষ্ট। যদি পরিবর্তন main, গ্লোবাল ভেরিয়েবল বা নির্ভরতাকে প্রভাবিত করে, তবে Hot Restart প্রয়োজন।
Hot Reload isolate পুনরায়শুরু না করে Dart VM এ আপডেটেড কোড ইনজেক্শন করে পরিবর্তন প্রয়োগ করে। এটি কেবল সেই পরিবর্তনের জন্য সম্ভব যা টাইপ গঠন ভাঙ্গ করে না এবং ওয়িজেট পুনরায়আরম্ভের প্রয়োজন নেই। Hot Restart এর সময়, isolate সম্পূর্ণ পুনরায়শুরু হয়, যা ক্লাস এবং মেথড মুছে ফেলা বা পুনরায় নামকরণ সহ যে কোনো পরিবর্তন প্রয়োগের অনুমতি দেয়।
Flutter টিম অনুযায়ী, অধিকাংশ পরিবর্তনের জন্য Hot Reload এ 1 সেকেন্ডের কম সময় লাগে, যেখানে Hot Restart এ 1 থেকে 3 সেকেন্ড লাগে। প্রায় 80% যূজার ইন্টারফেস পরিবর্তনের জন্য Hot Reload যথেষ্ট। অ্যাপ্লিকেশন কনফিগারেশন, গ্লোবাল ভেরিয়েবল, Dart রেপারে নেটিভ প্লাগইন এবং আর্কিটেক্চারাল সিদ্ধান্ত পরিবর্তনের সময় Hot Restart প্রয়োজন।
নিম্নলিখিত কৌশল সুপারিশ করা হয়: UI এর দৃশ্য সম্পাদন এবং ছোট যুক্তি পরিবর্তনের জন্য Hot Reload ব্যবহার করুন; ডেটা গঠন পরিবর্তন, নির্ভরতা যোগ বা ইনিশিয়ালাইজেশন কোড সম্পাদনের সময় Hot Restart এ স্যাপ করুন। এটি অপেক্ষা সময় হ্রাস করে এবং উচ্চ ডেভেলপমেন্ট উৎপাদকতা বজায় রাখে।
হাট পুনরায়শুরুর প্রক্রিয়া ফ্রেমওয়ার্ক এবং প্রোগ্রামিং ভাষার উপর নির্ভর করে ভিন্নভাবে বাস্তবায়িত হয়। Flutter Dart VM JIT কম্পাইলেশনের মাধ্যমে Hot Restart এর সবচেয়ে পরিপক্ব বাস্তবায়ন প্রদান করে, যেখানে React Native Metro Bundler এবং JavaScript Core বা Hermes এর মাধ্যমে একটি অনুরূপ প্রক্রিয়া ব্যবহার করে।
Flutter এ, flutter run এর মাধ্যমে অ্যাপ্লিকেশন শুরু করার পর টার্মিনালে r কমান্ডের মাধ্যমে Hot Restart সক্রিয় হয়। বিকল্পভাবে, Android Studio, VS Code বা IntelliJ IDEA এ Hot Restart বটন ব্যবহার করুন। Hot Restart কেবল debug মোডে কাজ করে এবং profile এবং release বিল্ডে উপলব্ধ নেই। করার সময়, Flutter টুলিং পরিবর্তিত ফাইলগুলি kernel ফর্মেটে পুনর্বিন্যাস করে এবং ডিভাইসে প্রেরণ করে।
// Hot Restart এর আগে: পুরানো সংস্করণ
class Counter extends StatefulWidget {
final int initialValue = 0;
// Hot Restart এর পর: নতুন মান কার্যকর হবে
// final int initialValue = 10;
}
class CounterState extends State<Counter> {
int _count = 0;
// Hot Reload _count সংরক্ষণ করে, Hot Restart এটিকে 0 এ রিসেট করে
}
Flutter এ Hot Restart এর একটি সীমাবদ্ধতা হল ডিবাগ অবস্থা সংরক্ষণ করতে অসমর্থতা। পুনরায়শুরুর পর, সকল ব্রেকপয়ন্ট সংরক্ষিত থাকে, কিন্তু ডিবাগারে ভেরিয়েবলের মান রিসেট হয়। পুনরায়শুরুর মধ্যে অবস্থা সংরক্ষণের জন্য State Restoration প্রক্রিয়া ব্যবহৃত হয়।
React Native এ, হাট পুনরায়শুরু Metro Bundler এর মাধ্যমে বাস্তবায়িত হয়, যা একটি JavaScript মডিউল বান্ডলার। কোড পরিবর্তনের সময়, Metro পরিবর্তিত মডিউলগুলি পুনর্নির্মাণ করে এবং আপডেটেড বান্ডল ডিভাইসে প্রেরণ করে। React Native Fast Refresh সমর্থন করে, যা Hot Reload এর একটি অ্যানালগ যা React hooks ব্যবহার করে কার্যকরী কম্পোনেন্টের অবস্থা সংরক্ষণ করে।
React Native এ সম্পূর্ণ পুনরায়শুরু (Reload) JavaScript ইঞ্জিন এবং সম্পূর্ণ অ্যাপ্লিকেশন পুনরায় লোড করে। এটি Flutter এ Hot Restart এর সমান। এটি সক্রিয় করতে, iOS সিমুলেটরে Cmd+R বা Android এ R দুইবার টিপুন। React Native এ সম্পূর্ণ পুনরায়শুরুর সময় বান্ডলের আকারের উপর নির্ভর করে 2 থেকে 8 সেকেন্ডের মধ্যে পরিবর্তিত হয়।
Hot Restart বেশ কয়েকটি ডেভেলপমেন্ট পরিদৃশ্যে একটি অপরিহার্য সরঞ্জাম। প্রথম এবং সবচেয়ে স্পষ্ট হল অ্যাপ্লিকেশনের গ্লোবাল কনফিগারেশন পরিবর্তন করা: থিম, লোকালইজেশন, অবস্থা প্রদাতা। যদি আপনি ওয়িজেট ট্রির মূলে একটি প্রদাতা পরিবর্তন করেন বা DI কন্টেনারে একটি নতুন মডিউল যোগ করেন, তবে Hot Restart সকল কম্পোনেন্টের সঠিক ইনিশিয়ালাইজেশনের গারন্টি দেয়।
দ্বিতীয় পরিদৃশ্য হল স্টেটিক ভেরিয়েবল এবং ধ্রুবক পরিবর্তন করা। Dart এ, স্টেটিক ফিল্ড ক্লাস লোড হোরার সময় একবার ইনিশিয়ালাইজ হয়। Hot Reload স্টেটিক ফিল্ডে পরিবর্তন প্রয়োগ করে না, তাই সেগুলি আপডেটের জন্য Hot Restart প্রয়োজন। এটি বিশেষ করে কনফিগারেশন ধ্রুবক, API URL এবং ফিচার ফ্ল্যাগের সাথে কাজ করার সময় প্রাসঙ্গিক।
তৃতীয় পরিদৃশ্য হল ইনিশিয়ালাইজেশন ডিবাগিং: main ফাঙ্কশন, স্প্ল্যাশ স্ক্রীন, নির্ভরতা লোডিং যাচাই করা। প্রতিটি Hot Restart এর সাথে, অ্যাপ্লিকেশন একটি সম্পূর্ণ ইনিশিয়ালাইজেশন চক্র অতিক্রম করে, যা কেবল স্টার্টআপে ঘটে যাওয়া ত্রুটি চিহ্নিত করতে সাহায্য করে — SharedPreferences সমস্যা, ডেটাবেস সংযোগ ত্রুটি, ইনিশিয়ালাইজেশন টাইমআউট।
চতুর্থ পরিদৃশ্য হল খালি অবস্থা পরীক্ষা। Hot Restart অ্যাপ্লিকেশনের সকল অবস্থা রিসেট করে, যা আপনাকে প্রথম লঞ্চে আচরণ পরীক্ষা করতে দেয়: অনবোর্ডিং প্রদর্শন, অনুমতি অনুরোধ, খালি তালিকা এবং প্লেসহোল্ডার স্ক্রীন। পুনরাবৃত্তি পরীক্ষার জন্য, এটি অ্যাপ্লিকেশন পুনরায় ইনস্টল করার চেয়ে উল্লেখযোগ্যভাবে দ্রুততর।
সামান্য জিজ্ঞাসা
Hot Restart অ্যাপ্লিকেশন এবং Dart VM সম্পূর্ণ পুনরায়শুরু করে, অবস্থা প্রারম্ভিকে রিসেট করে। Hot Reload চলমান অ্যাপ্লিকেশনে পরিবর্তন ইনজেক্ট করে, বর্তমান UI অবস্থা সংরক্ষণ করে। Hot Reload দ্রুততর কিন্তু ইনিশিয়ালাইজেশন পরিবর্তন এবং গ্লোবাল ভেরিয়েবলের জন্য ব্যবহার করা যায় না।
flutter run চালু করার পর টার্মিনালে Hot Restart এর জন্য R (Shift+R) টিপুন। Android Studio বা VS Code এ, ডিবাগ প্যানেলে Hot Restart বটন ব্যবহার করুন। কমান্ডটি কেবল debug মোডে উপলব্ধ।
মধ্যম আকারের প্রকল্পগুলির জন্য একটি সাধারণ Hot Restart এ 1 থেকে 3 সেকেন্ড সময় লাগে। সময় Dart ফাইলের সংখ্যা, ওয়িজেট ট্রির জটিলতা এবং ডিভাইসের কর্মক্ষমতার উপর নির্ভর করে। বড় প্রকল্পগুলির জন্য, সময় 5–8 সেকেন্ড পর্যন্ত পৌঁছতে পারে।
না, Hot Restart কেবল debug মোডই উপলব্ধ। Release এবং profile বিল্ড AOT কম্পাইলেশন ব্যবহার করে, যা হাট রিলোডিং সমর্থন করে না। Release এ কোড আপডেটের জন্য সম্পূর্ণ পুনর্নির্মাণ প্রয়োজন।
Hot Restart নেটিভ কোড কে প্রভাবিত করে না — Kotlin, Swift বা Java প্লাগইন। যদি প্লাগইনের নেটিভ কোডে পরিবর্তন করা হয়, তবে সম্পূর্ণ প্রকল্প পুনর্নির্মাণ প্রয়োজন। Hot Restart কেবল অ্যাপ্লিকেশনের Dart স্তরের জন্য কার্যকর।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন