web applications - "क्लाइंट-साइड रूटिंग" या "सर्वर-साइड रूटिंग" का उपयोग कब करें?




web-applications routing (2)

मैं इस बारे में थोड़ा उलझन में हूं, और मुझे यह सवाल पूछने में थोड़ा बेवकूफ लग रहा है, लेकिन मैं इसे समझना चाहता हूं।

तो, मान लीजिए कि मैं बैकबोन, कोणीय या ड्यूरंडल जैसे क्लाइंट साइड वेब फ्रेमवर्क के साथ काम कर रहा हूं। इस ढांचे में रूटिंग शामिल है।

लेकिन मेरे पास अभी भी डेटाबेस सामान के लिए एक सर्वर है, और इसी तरह, जिसमें रूटिंग भी है।

मेरा प्रश्न अब है:

"क्लाइंट-साइड रूटिंग" या "सर्वर-साइड रूटिंग" का उपयोग कब करें?

यह कैसे "तय" किया जाता है कि क्या रूटिंग पहले से ही क्लाइंट की तरफ से की जाती है या क्या रिक्वेस्ट सबसे पहले वेब सर्वर को भेजी जाती है?

मेरे पास इसकी कल्पना करने में विशेष रूप से कठिन समय है क्योंकि क्लाइंट पक्ष उस अनुरोध के बारे में जानने से पहले सर्वर को रूट कर सकता है।

अगर कोई ये समझा सकता है कि ये दो रूटिंग सिस्टम एक साथ कैसे काम कर सकते हैं, तो मैं बहुत आभारी हूं।

पुनश्च: मैंने कोड नमूनों को शामिल नहीं किया है क्योंकि मैं किसी विशेष रूपरेखा से संबंधित उत्तर की तलाश में नहीं हूं, लेकिन सामान्य रूप से मार्ग प्रक्रिया के विषय में।


tl; डॉ:

  • जब भी आप किसी लिंक पर क्लिक करते हैं, सर्वर-साइड रूटिंग के साथ आप एक नया वेबपेज डाउनलोड करते हैं,
  • क्लाइंट-साइड रूटिंग के साथ वेबएप डाउनलोड, प्रक्रियाएं और आपके लिए नए डेटा प्रदर्शित करता है।

एक साधारण लिंक पर क्लिक करने वाले उपयोगकर्ता की कल्पना करें: <a href="/hello">Hello!</a>

सर्वर साइड रूटिंग का उपयोग करने वाले वेब पर :

  • ब्राउज़र यह पता लगाता है कि उपयोगकर्ता ने एंकर तत्व पर क्लिक किया है।
  • यह href टैग में मिले URL से HTTP GET अनुरोध करता है
  • सर्वर अनुरोध को संसाधित करता है, और प्रतिक्रिया के रूप में एक नया दस्तावेज़ (आमतौर पर HTML) भेजता है।
  • ब्राउज़र पुराने वेबपेज को पूरी तरह से हटा देता है, और नए डाउनलोड किए गए को प्रदर्शित करता है।

यदि वेबएप क्लाइंट साइड रूटिंग का उपयोग करता है:

  • ब्राउज़र पता लगाता है कि उपयोगकर्ता ने पहले की तरह ही एंकर तत्व पर क्लिक किया है।
  • क्लाइंट साइड कोड (आमतौर पर रूटिंग लाइब्रेरी) इस घटना को पकड़ता है, यह पता लगाता है कि URL बाहरी लिंक नहीं है, और फिर ब्राउज़र को HTTP GET अनुरोध करने से रोकता है
  • रूटिंग लाइब्रेरी तब ब्राउज़र में प्रदर्शित URL को मैन्युअल रूप से बदल देती है (HTML5 इतिहास API का उपयोग करके, या पुराने ब्राउज़र पर URL हैशबैंग का उपयोग करके)
  • रूटिंग लाइब्रेरी फिर क्लाइंट ऐप की स्थिति को बदल देती है । उदाहरण के लिए, यह रूट नियमों के अनुसार रूट रिएक्ट / एंगुलर / आदि घटक बदल सकता है।
  • एप्लिकेशन (विशेष रूप से एमवीसी लाइब्रेरी, जैसे रिएक्ट) तब राज्य परिवर्तनों को संसाधित करता है। यह नए घटकों को प्रस्तुत करता है, और यदि आवश्यक हो, तो यह सर्वर से नए डेटा का अनुरोध करता है। लेकिन इस बार प्रतिक्रिया आवश्यक रूप से एक संपूर्ण वेबपेज नहीं है, यह "कच्चा" डेटा भी हो सकता है, जिस स्थिति में क्लाइंट-साइड कोड इसे HTML तत्वों में बदल देता है।

क्लाइंट-साइड रूटिंग ध्वनि अधिक जटिल है, क्योंकि यह है। लेकिन कुछ पुस्तकालय वास्तव में इन दिनों को आसान बनाते हैं।

क्लाइंट-साइड रूटिंग के कई अपसाइड हैं: आप नई सामग्री प्रदर्शित करने के लिए कम डेटा डाउनलोड करते हैं, आप DOM तत्वों का पुन: उपयोग कर सकते हैं, उपयोगकर्ता के लिए लोडिंग सूचनाएँ प्रदर्शित कर सकते हैं हालाँकि, सर्वर की तरफ DOM को उत्पन्न करने वाले वेबप्ले क्रॉल करना बहुत आसान है (खोज के द्वारा) इंजन), जिससे एसईओ अनुकूलन आसान हो जाता है। इन दोनों दृष्टिकोणों का संयोजन भी संभव है, उत्कृष्ट फ्लो राउटर एसएसआर इसके लिए एक अच्छा उदाहरण है।


आधुनिक अनुप्रयोग अक्सर क्लाइंट-साइड और सर्वर-साइड रूटिंग दोनों का उपयोग "मिश्रित" या "हाइब्रिड" तरीके से करते हैं, इसलिए इन दोनों तकनीकों के बीच एक रेखा खींचना काफी कठिन है।

सर्वर-साइड रूटिंग और क्लाइंट-साइड रूटिंग का उपयोग कब और कैसे करें, यह बेहतर ढंग से समझने के लिए, आपको संभवतः यह पता लगाना होगा कि ऐसा क्या होता है जब आपके पास एक बड़ा अनुप्रयोग होता है जो एक बड़ी कारख़ाना कंपनी का प्रबंधन करने के लिए उपयोग किया जाता है (यह अक्सर ऐसा नहीं होता है वास्तविक दुनिया। यह सिर्फ एक उपयोगी उदाहरण है)।

इन मामलों में, आपके पास अलग-अलग लोग (विभिन्न भूमिकाओं के साथ) होंगे जो इस जटिल वातावरण के विभिन्न भागों (विभिन्न पहलुओं या डोमेन ) को देखते हैं। उदाहरण के लिए, एक इंजीनियर बहुत सारे डिजिटल दस्तावेज़ों के साथ एक फ़ाइल सर्वर को देखेगा, जबकि कंपनी कैंटीन में काम करने वाले लोग मेनू को तैयार करने, काम करने का समय और स्टोर देखने के लिए देखेंगे। ये पूरी तरह से अलग अनुप्रयोग "डोमेन" हैं जिनके लिए पूरी तरह से अलग यूआई की आवश्यकता होती है इसलिए यह प्रत्येक प्रकार के उपयोगकर्ता के लिए विभिन्न एसपीए की सेवा करने के लिए समझ में आता है।

इस स्थिति में, आप इस यूआई के अंदर नेविगेट करने के लिए क्लाइंट-साइड रूटिंग का उपयोग कर सकते हैं (और डेटा लोड करने के लिए ) एक विशिष्ट यूआई (एसपीए) की सेवा के लिए सर्वर-साइड रूटिंग का उपयोग कर सकते हैं। इन एसपीए को "डैशबोर्ड" या "कंट्रोल पैनल" के रूप में विशिष्ट "कार्यों" के लिए समर्पित और विशिष्ट प्रकार के "पेशेवरों" द्वारा उपयोग किया जाता है।

उदाहरण के लिए, आप सभी इंजीनियरों के लिए एक / myapp / इंजीनियरिंग मार्ग और आपके सभी कैंटीन कर्मचारियों के लिए एक / myapp / कैंटीन हो सकता है। इनमें से प्रत्येक URL एक विशिष्ट डोमेन का प्रतिनिधित्व करेगा और एक विशिष्ट डैशबोर्ड को एक विशिष्ट प्रकार के उपयोगकर्ता के लिए सेवा प्रदान करेगा। ये URL सर्वर-साइड प्रबंधित होंगे।

इसके बजाय, आप इन डैशबोर्ड में से प्रत्येक के अंदर नेविगेट करने के लिए क्लाइंट-साइड रूटिंग का उपयोग करेंगे, डेटा लोड करेंगे और आवश्यकतानुसार यूआई को फिर से कॉन्फ़िगर करेंगे।

निश्चित रूप से, आपके ऐप में शायद आपके डेटा के लिए आवश्यक डेटा प्राप्त करने के लिए आपके SPA द्वारा उपयोग किया गया एक RESTful API होगा। REST API से संबंधित URL को अपना कार्य करने के लिए सर्वर-साइड प्रबंधित किया जाना चाहिए (भले ही वे वास्तविक HTML पृष्ठों से संबद्ध न हों) और आपके SPA द्वारा केवल "पर्दे के पीछे" ही मंगवाए गए हों। उन्हें आमतौर पर एक अलग "डोमेन" में रखा जाता है जैसे / myapp / api।

ऐसा ही स्थैतिक वेब पेज ("कॉन्टैक्ट्स" पेज और "ए पेज" के बारे में) के साथ होता है, जो आमतौर पर / myapp / static फोल्डर (या "डोमेन") और प्रबंधित सर्वर-साइड (यह फोल्डर या "डोमेन" में रखा जा सकता है हो - और अक्सर - एक अलग सर्वर पर होस्ट किया जाता है)।

इसलिए, आपको संभवतः एक-दूसरे से एप्लिकेशन डोमेन को अलग करने के लिए सर्वर-साइड रूटिंग का उपयोग करना चाहिए और प्रत्येक डोमेन के अंदर नेविगेट करने के लिए क्लाइंट-साइड रूटिंग।







server-side