<पी> इस ट्यूटोरियल में, हम रिएक्ट सर्वर कंपोनेंट्स को समझेंगे और उस ज्ञान के साथ, आपके ऐप के लिए एक सरल व्यू काउंटर बनाएंगे। यदि आप कार्यान्वयन के साथ आगे बढ़ना चाहते हैं तो बेझिझक प्रोजेक्ट सेटअप पर जाएं। रिएक्ट सर्वर घटकों को समझना
<पी> यह समझने के लिए कि रिएक्ट सर्वर घटक कैसे काम करते हैं, हम संक्षेप में क्लाइंट-साइड रेंडरिंग (सीएसआर) और सर्वर-साइड रेंडरिंग (एसएसआर) पर नजर डालेंगे। क्लाइंट-साइड रेंडरिंग (सीएसआर)
<पी> सीएसआर में, अधिकांश रेंडरिंग कार्य क्लाइंट-साइड पर ब्राउज़र में होता है: - उपयोगकर्ता एक साइट का अनुरोध करता है।
- सर्वर एक HTML फ़ाइल भेजता है और CSS और JS फ़ाइलों से लिंक करता है।
- क्लाइंट JS संसाधनों को डाउनलोड करता है।
- क्लाइंट पृष्ठ को बिना सामग्री के प्रस्तुत करता है।
- क्लाइंट सर्वर में एपीआई से डेटा प्राप्त करता है।
- क्लाइंट सामग्री के साथ पृष्ठ को पुनः प्रस्तुत करता है।
<पी>
सर्वर-साइड रेंडरिंग (SSR)
<पी> एसएसआर में, सर्वर प्रत्येक अनुरोध के लिए पूर्ण HTML सामग्री उत्पन्न करता है और इसे क्लाइंट को भेजता है: - उपयोगकर्ता एक साइट का अनुरोध करता है।
- सर्वर वास्तविक HTML फ़ाइलों को प्रस्तुत करता है लेकिन वे अभी तक इंटरैक्टिव नहीं हैं।
- क्लाइंट JS संसाधनों को डाउनलोड करता है।
- क्लाइंट में,
hydrateRoot() का उपयोग करके फ़ंक्शन, ईवेंट श्रोता, स्थिति और रिएक्ट घटकों की अन्य अंतःक्रियाशीलता सर्वर द्वारा उत्पन्न मौजूदा DOM तत्वों से जुड़ी होती है, इसे हाइड्रेशन के रूप में जाना जाता है .
- क्लाइंट सर्वर में एपीआई से डेटा प्राप्त करता है।
- क्लाइंट सामग्री के साथ पृष्ठ को पुनः प्रस्तुत करता है।
<पी>
<पी> एसएसआर के लाभ पी> - बेहतर SEO :क्योंकि खोज इंजन क्रॉलर पूरी तरह से प्रस्तुत HTML को पढ़ सकते हैं, SSR अधिक SEO-अनुकूल है।
- तेज़ प्रारंभिक लोड :चूंकि संपूर्ण HTML सामग्री सर्वर से रेंडर और भेजी जाती है, इसलिए उपयोगकर्ता पृष्ठ की सामग्री को शीघ्रता से देखते हैं।
<पी> एसएसआर के नुकसान पी> - धीमा नेविगेशन :प्रत्येक नए पेज अनुरोध के लिए सर्वर से HTML को पूर्ण पुनः लोड करने के लिए राउंड-ट्रिप संचार की आवश्यकता होती है।
- सर्वर लोड में वृद्धि :चूंकि सर्वर पेज को प्रस्तुत करने में अधिकांश काम करता है, इसलिए उसे एकाधिक अनुरोधों को संभालने के लिए अधिक संसाधनों की आवश्यकता हो सकती है।
रिएक्ट सर्वर घटक
<पी> RSC रिएक्ट में एक सुविधा है जो घटकों को पूरी तरह से सर्वर पर प्रस्तुत करने की अनुमति देती है: - सर्वर डेटा लाता है।
- सर्वर ऐप को सामग्री के साथ प्रस्तुत करता है।
- क्लाइंट JS संसाधनों को डाउनलोड करता है।
- क्लाइंट में हाइड्रेशन होता है।
<पी> ध्यान दें: सर्वर घटक पूरी तरह से सर्वर पर प्रस्तुत किए जाते हैं, वे जेएस बंडल में शामिल नहीं होते हैं और वे हाइड्रेटेड नहीं होते हैं। तो चरण 3 और 4 क्लाइंट घटकों के लिए होते हैं। <पी>
<पी> आरएससी के लाभ पी> - कुशल डेटा प्रबंधन: डेटा फ़ेचिंग को आपके डेटाबेस के करीब, सर्वर पर ले जाया जाता है। यह क्लाइंट-सर्वर राउंड ट्रिप को हटाकर प्रदर्शन में सुधार करता है।
- क्लाइंट पर जावास्क्रिप्ट का आकार कम किया गया :चूंकि रिएक्ट सर्वर घटक क्लाइंट को कोई जावास्क्रिप्ट नहीं भेजते हैं, इसलिए समग्र बंडल आकार कम हो जाता है, जिससे प्रदर्शन में सुधार होता है।
- तेज़ प्रारंभिक पृष्ठ लोड :सर्वर पर प्री-रेंडरिंग घटकों का मतलब है कि क्लाइंट को पूरी तरह से रेंडर किया गया HTML तेजी से प्राप्त होता है, जिससे फर्स्ट कंटेंटफुल पेंट (एफसीपी) के समय में सुधार होता है।
- बेहतर SEO :सामग्री पूरी तरह से सर्वर-साइड प्रस्तुत की गई है, जिससे खोज इंजनों के लिए सामग्री को क्रॉल और अनुक्रमित करना आसान हो जाता है।
<पी> आरएससी की चुनौतियाँ पी> - स्थिति और जीवनचक्र :रिएक्ट सर्वर कंपोनेंट्स के पास ब्राउज़र एपीआई (जैसे
useState) तक पहुंच नहीं है , useEffect ), चूंकि वे सर्वर पर प्रस्तुत किए जाते हैं।
- कोई क्लाइंट-साइड इंटरएक्टिविटी नहीं :रिएक्ट सर्वर घटक गतिशील अद्यतन या अन्तरक्रियाशीलता के लिए नहीं हैं। आपको अपने ऐप के इंटरैक्टिव भागों के लिए क्लाइंट घटकों का उपयोग करने की आवश्यकता है।
रिएक्ट सर्वर घटकों का उपयोग करना
Next.js में रिएक्ट सर्वर घटक
<पी> डिफ़ॉल्ट रूप से, Next.js सर्वर घटकों का उपयोग करता है। इन्हें 3 अलग-अलग तरीकों से प्रस्तुत किया गया है: - स्टेटिक रेंडरिंग (डिफ़ॉल्ट): मार्ग निर्माण समय पर प्रस्तुत किए जाते हैं , या डेटा पुनर्वैधीकरण के बाद पृष्ठभूमि में।
- गतिशील प्रतिपादन: प्रत्येक उपयोगकर्ता के लिए अनुरोध समय पर मार्ग प्रस्तुत किए जाते हैं .
- स्ट्रीमिंग: यूआई को सर्वर से उत्तरोत्तर प्रस्तुत किया जाता है।
आपको रिएक्ट सर्वर कंपोनेंट्स का उपयोग कब करना चाहिए ?
<पी> आपको रिएक्ट सर्वर कंपोनेंट्स का उपयोग कब करना चाहिए : - आपके पास स्थिर, गैर-संवादात्मक सामग्री है जो बार-बार नहीं बदलती है।
- आप क्लाइंट को भेजे गए जावास्क्रिप्ट को कम करके प्रदर्शन में सुधार करना चाहते हैं।
- SEO आपके एप्लिकेशन के लिए महत्वपूर्ण है।
- आप भारी डेटा-फ़ेचिंग या कम्प्यूटेशनल कार्यों को सर्वर पर लोड करना चाहते हैं।
<पी> आपको सर्वर घटकों पर तब प्रतिक्रिया नहीं देनी चाहिए : - आपके घटकों को क्लाइंट-साइड इंटरैक्टिविटी, स्थिति या हुक की आवश्यकता होती है।
- आपको ब्राउज़र एपीआई तक पहुंच की आवश्यकता है या वास्तविक समय अपडेट की आवश्यकता है।
- आप भारी क्लाइंट-साइड तर्क या उपयोगकर्ता-विशिष्ट सामग्री के साथ जटिल पृष्ठ बना रहे हैं।
सामान्य नुकसान
<पी> क्लाइंट घटक पूरी तरह से क्लाइंट पर प्रस्तुत नहीं किए जाते हैं पी> <पी> वे क्लाइंट और सर्वर दोनों पर प्रस्तुत किए जाते हैं। उन्हें सर्वर घटकों से अलग करने के लिए क्लाइंट घटक नाम दिया गया है। <पी> ‘use server’ निर्देश सर्वर क्रियाओं के लिए है पी> <पी> डिफ़ॉल्ट रूप से, Next.js सर्वर घटकों का उपयोग करता है इसलिए आपको कुछ भी निर्दिष्ट करने की आवश्यकता नहीं है। यदि आप क्लाइंट घटकों का उपयोग करना चाहते हैं, तो आप ‘use client’ जोड़ें सर्वर और क्लाइंट मॉड्यूल के बीच एक सीमा घोषित करने का निर्देश। ‘use server’ सर्वर क्रियाओं के लिए उपयोग किया जाने वाला एक पूरी तरह से अलग निर्देश है , जो इस ब्लॉगपोस्ट के दायरे से बाहर है। प्रोजेक्ट सेटअप
<पी> हम वर्सेल से ब्लॉग टेम्पलेट का उपयोग करेंगे: pnpm create next-app --example https://github.com/vercel/examples/tree/main/solutions/blog blog
<पी> आप उदाहरण को स्थानीय रूप से चला सकते हैं और देख सकते हैं कि यह कैसा दिखता है: cd blog
pnpm dev
<पी> आइए @upstash/redis इंस्टॉल करें : pnpm add @upstash/redis
पर्यावरण सेटअप
- अपस्टैश कंसोल → रेडिस पर जाएं और एक नया डेटाबेस बनाएं:
<पी>
- REST API अनुभाग तक नीचे स्क्रॉल करें,
.env पर स्विच करें टैब करें और अगले चरण के लिए पर्यावरण चर की प्रतिलिपि बनाएँ:
<पी>
- एक
.env बनाएं अपने पर्यावरण चर को फ़ाइल और पेस्ट करें:
UPSTASH_REDIS_REST_URL=<YOUR_URL>
UPSTASH_REDIS_REST_TOKEN=<YOUR_TOKEN>
सेटअप दृश्य घटक
<पी> /app/components/views.tsx बनाएं : import { headers } from 'next/headers'
import { Redis } from "@upstash/redis"
const redis = Redis.fromEnv();
async function view(slug: string, ip: string) {
// Hash the IP address to anonymize it
const buf = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(ip));
const hash = Array.from(new Uint8Array(buf)).map((b) => b.toString(16).padStart(2, "0")).join("");
// Deduplicate views
const newView = await redis.set(`deduplicate:${hash}:${slug}`, true, {
nx: true, // Only set the key if it doesn't exist
ex: 24 * 60 * 60, // Expire the key after 24 hours
});
if (newView) {
await redis.incr(`pageviews:${slug}`); // Increment the view count
}
}
export default async function Views({ slug }: { slug: string }) {
// Get the IP address of the user
const header = headers()
const ip = (header.get('x-forwarded-for') ?? '127.0.0.1').split(',')[0]
// Increment the view count
await view(slug, ip)
// Get the view count
const views = await redis.get<number>(`pageviews:${slug}`) || 0
return (
<p className="text-sm text-neutral-600 dark:text-neutral-400">
{views} views
</p>
)
}
आयात और दृश्य घटक प्रदर्शित करें
<पी> /app/blog/[slug]/page.tsx संपादित करें : ...
import Views from 'app/components/views'
...
<div className="flex justify-between items-center mt-2 mb-8 text-sm">
<p className="text-sm text-neutral-600 dark:text-neutral-400">
{formatDate(post.metadata.publishedAt)}
</p>
<Views slug={post.slug} />
</div>
...
<पी> व्यू काउंटर को क्रियाशील देखने के लिए http://localhost:3000/blog/vim पर जाएँ: <पी>
क्लाइंट कंपोनेंट सेटअप के साथ तुलना
<पी> क्लाइंट घटकों के साथ कार्यान्वयन देखने के लिए हमारे ब्लॉगपोस्ट "अपने Next.js ब्लॉग में एक व्यू काउंटर जोड़ना" देखें। <पी> पिछले अनुभागों में उल्लिखित अन्य लाभों के साथ, रिएक्ट सर्वर घटकों का उपयोग करना: - एक अलग एपीआई की आवश्यकता को हटा दिया गया।
- प्रकार की जाँच के लाभों के साथ घटक और उसके तर्क का एक सरल एकीकृत दृश्य प्रदान किया गया।
तैनाती
<पी> आप निम्नलिखित कमांड के साथ अपनी साइट को वर्सेल में तैनात कर सकते हैं: vercel
अंतिम शब्द
<पी> सर्वर और क्लाइंट दोनों घटकों की शक्तियों को मिलाकर, आप अपने अनुप्रयोगों में प्रदर्शन और अन्तरक्रियाशीलता के बीच सही संतुलन बना सकते हैं। मुझे आशा है कि यह मार्गदर्शिका आपको रिएक्ट सर्वर घटकों का प्रभावी ढंग से लाभ उठाने के बारे में सूचित निर्णय लेने में मदद करेगी।