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 पर्याप्त है। Hot Restart की आवश्यकता एप्लिकेशन कॉन्फ़िगरेशन, ग्लोबल चर, Dart रैपर्स में मूल प्लगइन और आर्किटेक्चरल निर्णयों को बदलते समय होती है।
निम्नलिखित रणनीति अनुशंसित है: 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें