
Next.js में, जिस तरह से क्लाइंट-साइड घटक ("क्लाइंट का उपयोग करें") SSR (सर्वर-साइड रेंडरिंग) के साथ काम करते हैं, वह कभी-कभी भ्रमित करने वाला हो सकता है। आइए इसे तोड़ें:
Next.js में क्लाइंट और सर्वर घटक कैसे काम करते हैं:
-
सर्वर घटक: ये Next.js में डिफ़ॉल्ट हैं और ये सर्वर पर पहले से रेंडर किए गए हैं। वे क्लाइंट को जावास्क्रिप्ट के रूप में नहीं बल्कि केवल HTML के रूप में भेजे जाते हैं।
-
क्लाइंट घटक: जब आप किसी घटक को "क्लाइंट का उपयोग करें" के साथ चिह्नित करते हैं, तो इसका मतलब है कि घटक को क्लाइंट-साइड पर चलने की आवश्यकता है क्योंकि इसमें इंटरैक्टिविटी हो सकती है (जैसे यूज़स्टेट, यूज़इफ़ेक्ट), या ब्राउज़र एपीआई पर निर्भर करता है जो सर्वर वातावरण में काम नहीं करता है।
क्यों क्लाइंट घटक अभी भी सर्वर पर HTML प्रस्तुत करते हैं:
भले ही एक घटक को "क्लाइंट का उपयोग करें" के रूप में चिह्नित किया गया है, उस घटक के लिए प्रारंभिक HTML अभी भी सर्वर (एसएसआर) पर उत्पन्न किया जा सकता है, लेकिन केवल स्थिर HTML उद्देश्यों के लिए . इसका मतलब यह है:
-
प्रारंभिक रेंडर: सर्वर बेहतर प्रदर्शन और एसईओ के लिए क्लाइंट घटकों सहित पेज के लिए HTML उत्पन्न करता है। यह स्थिर HTML है, इंटरैक्टिव नहीं।
-
हाइड्रेशन: जब यह HTML ब्राउज़र तक पहुंचता है, तो Next.js क्लाइंट-साइड घटक को जावास्क्रिप्ट के साथ हाइड्रेट करता है, जिससे इसकी इंटरैक्टिविटी सक्षम हो जाती है।
ऐसा क्यूँ होता है:
-
प्रदर्शन: प्रारंभिक HTML को सर्वर-रेंडर करके, उपयोगकर्ता क्लाइंट-साइड जावास्क्रिप्ट के लोड होने की प्रतीक्षा किए बिना सामग्री को तेजी से (तेज़ टाइम टू फर्स्ट बाइट, या टीटीएफबी) देख सकता है।
-
एसईओ: HTML को प्री-रेंडर करना एसईओ के लिए महत्वपूर्ण है क्योंकि यह सुनिश्चित करता है कि खोज इंजन सामग्री को क्रॉल और अनुक्रमित कर सकते हैं।
-
हाइड्रेशन: एक बार HTML परोसे जाने के बाद, Next.js क्लाइंट को जावास्क्रिप्ट बंडल भेजता है, जो स्थिर HTML को "हाइड्रेट" करता है, इवेंट श्रोताओं को जोड़ता है और इसे इंटरैक्टिव बनाता है।
"क्लाइंट का उपयोग करें" के साथ क्या होता है?
-
सर्वर-साइड HTML रेंडरिंग: भले ही एक घटक क्लाइंट-साइड है, Next.js अभी भी प्रारंभिक दृश्य के लिए HTML उत्पन्न करता है। इसलिए, हालांकि यह सर्वर पर इंटरैक्टिव जावास्क्रिप्ट नहीं चलाता है, यह क्लाइंट को HTML मार्कअप भेजता है।
-
क्लाइंट-साइड हाइड्रेशन: इंटरएक्टिविटी के लिए आवश्यक जावास्क्रिप्ट क्लाइंट को भेजा जाता है, और एक बार पेज लोड होने के बाद, Next.js घटक को हाइड्रेट करता है, जिससे यह पूरी तरह कार्यात्मक हो जाता है।
ग़लतफ़हमी:
किसी घटक को "क्लाइंट का उपयोग करें" के साथ चिह्नित करने का मतलब यह नहीं है कि यह कोई HTML सर्वर-साइड उत्पन्न नहीं करेगा। इसका सीधा सा मतलब है कि इंटरैक्टिव जावास्क्रिप्ट केवल क्लाइंट पर लोड किया जाएगा, लेकिन सर्वर अभी भी रेंडरिंग के लिए प्रारंभिक स्थिर HTML उत्पन्न कर सकता है।
संक्षेप में:
- क्लाइंट घटकों का एसएसआर: क्लाइंट घटकों के लिए HTML को सर्वर पर (प्रारंभिक लोड के लिए) पूर्व-रेंडर किया जा सकता है, लेकिन वे क्लाइंट पर हाइड्रेटेड होने तक इंटरैक्टिव नहीं होते हैं।
- "क्लाइंट का उपयोग करें": यह निर्देश सुनिश्चित करता है कि क्लाइंट-साइड इंटरएक्टिविटी के लिए जावास्क्रिप्ट केवल ब्राउज़र में निष्पादित किया जाता है, लेकिन सर्वर पर स्थिर HTML पीढ़ी को नहीं रोकता है।
यदि आप यह सुनिश्चित करना चाहते हैं कि घटक अलग तरीके से व्यवहार करता है, तो आपको इस बात पर पुनर्विचार करने की आवश्यकता हो सकती है कि आप कुछ गतिशील सामग्री को कहां और कैसे लोड करते हैं, खासकर यदि आप क्लाइंट-विशिष्ट व्यवहार (जैसे विंडो या दस्तावेज़ तक पहुंच) की अपेक्षा कर रहे हैं।