5.6

अंग्रेज़ी में देखें

5.6 फ्रंटएंड इंजीनियरिंग

अवलोकन और प्रेरणा

फ्रंटएंड इंजीनियरिंग सॉफ़्टवेयर की क्लाइंट-सामना करने वाली परत बनाने का अनुशासन है: वह कोड जो ब्राउज़र में या डिवाइस पर चलता है और डिज़ाइन, सामग्री, और डेटा को एक काम करने वाले इंटरफ़ेस में बदल देता है। यह वास्तविक दुनिया में ब्राउज़रों, डिवाइसों, और नेटवर्क स्थितियों की विशाल विविधता में फ्रेमवर्क और आर्किटेक्चर विकल्पों, रेंडरिंग रणनीति, स्टेट प्रबंधन, प्रदर्शन, और लचीलेपन (resilience) तक फैला हुआ है। फ्रंटएंड वह जगह है जहां सारा अपस्ट्रीम काम (UX, डिज़ाइन, सामग्री, एक्सेसिबिलिटी, अंतरराष्ट्रीयकरण) या तो उपयोगकर्ता तक सफलतापूर्वक पहुंचता है या बिखर जाता है।

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

एंटरप्राइज़ और सरकार की प्रासंगिकता तीव्र है। एंटरप्राइज़ दीर्घकालिक एप्लिकेशन बनाए रखते हैं जहां फ्रेमवर्क की दीर्घायु और बनाए रखने-योग्यता नवीनता से अधिक मायने रखती है, और जहां कई टीमों को आपस में काम करना पड़ता है। सरकारें पूरी जनता की सेवा करती हैं, जिसमें पुराने डिवाइसों, धीमे या मीटर्ड कनेक्शनों, और सहायक तकनीकों (assistive technologies) वाले लोग शामिल हैं। इससे प्रदर्शन, प्रोग्रेसिव एन्हांसमेंट, और लचीलापन वैकल्पिक चमक-दमक नहीं बल्कि एक ऐसी सेवा जो सबके लिए काम करती है और एक ऐसी सेवा जो सबसे कम-सुविधाप्राप्त को बाहर कर देती है, के बीच का अंतर बन जाते हैं। एक सरकारी सेवा जो केवल तेज़ कनेक्शन वाले नवीनतम फ़ोन पर काम करती है, अपने जनादेश में विफल हो जाती है।

मुख्य सिद्धांत

  • फ्रंटएंड एक ऐसे वातावरण में चलता है जिसे आप नियंत्रित नहीं करते; परिवर्तनशीलता और विफलता के लिए डिज़ाइन करें।
  • दीर्घकालिक सिस्टमों के लिए उबाऊ, टिकाऊ तकनीक चुनें; बनाए रखने-योग्यता और भर्ती के लिए अनुकूलित करें।
  • प्रदर्शन एक फ़ीचर है और, कई उपयोगकर्ताओं के लिए, पहुंच की एक पूर्व-शर्त है।
  • प्रोग्रेसिव एन्हांसमेंट: पहले एक काम करने वाला मूल अनुभव प्रदान करें, फिर सुधार परतों में जोड़ें।
  • कम कोड भेजें; सबसे तेज़ और सबसे विश्वसनीय कोड वह है जिसे आप शिप नहीं करते।
  • रेंडरिंग रणनीति को फ़ैशन के बजाय सामग्री प्रकार और उपयोगकर्ता आवश्यकता से मिलाएं।
  • लचीलापन: जब चीज़ें गलत हो जाएं, तो इंटरफ़ेस को टूटना नहीं चाहिए, बल्कि सहजता से क्षरित होना चाहिए।
  • मानक और प्लेटफ़ॉर्म फ़ीचर फ्रेमवर्कों से अधिक टिकते हैं; प्लेटफ़ॉर्म पर निर्भर रहें।

सिफारिशें

दीर्घायु और उपयुक्तता के लिए फ्रेमवर्क चुनें, प्रचार के लिए नहीं

फ्रंटएंड तकनीक को समस्या, टीम, रखरखाव क्षितिज, और भर्ती बाज़ार के आधार पर चुनें, न कि उस पर जो चलन में है। दीर्घकालिक एंटरप्राइज़ और सरकारी सिस्टमों के लिए, बड़े प्रतिभा पूल, स्थिर रिलीज़ प्रथाओं, और स्पष्ट अपग्रेड पथों वाली परिपक्व, अच्छी तरह समर्थित तकनीकों को प्राथमिकता दें। फ्रेमवर्क बदलाव की कुल लागत को तौलें: फिर से लिखना महंगा और जोखिम भरा है। ऐसे दृष्टिकोणों को प्राथमिकता दें जो वेब मानकों पर निर्भर करते हैं ताकि आपका निवेश फ्रेमवर्क बदलाव से बचा रहे, और फ्रेमवर्क-विशिष्ट कोड को सीमाओं के पीछे अलग रखें ताकि एप्लिकेशन किसी एक लाइब्रेरी के जीवनचक्र का बंधक न बने।

रेंडरिंग रणनीति को आवश्यकता से मिलाएं

मुख्य रेंडरिंग रणनीतियां अलग-अलग सामग्री के लिए उपयुक्त हैं। सर्वर-साइड रेंडरिंग (SSR) तेज़ पहला पेंट और अच्छा SEO (सर्च इंजन ऑप्टिमाइज़ेशन) उत्पन्न करती है और बिना क्लाइंट JavaScript के काम करती है, जो सामग्री-भारी और सार्वजनिक-सामना करने वाले पेजों के लिए उपयुक्त है। स्टैटिक साइट जनरेशन (SSG) अधिकतम गति और कैश-योग्यता के लिए बिल्ड टाइम पर पहले से रेंडर करता है, ऐसी सामग्री के लिए आदर्श जो कम-कम बदलती है। क्लाइंट-साइड रेंडरिंग (CSR) प्रमाणीकरण के पीछे अत्यधिक इंटरैक्टिव ऐप-जैसे अनुभवों के लिए उपयुक्त है। स्ट्रीमिंग और प्रोग्रेसिव हाइड्रेशन पेज को क्रमिक रूप से भेजते और सक्रिय करते हैं ताकि उपयोगकर्ता जल्दी सामग्री देख और उपयोग कर सकें। कई बड़े सिस्टम एक को वैश्विक रूप से चुनने के बजाय इन्हें प्रति मार्ग (route) मिलाते हैं। स्टेट को जानबूझकर प्रबंधित करें: सर्वर स्टेट, URL स्टेट, और स्थानीय UI स्टेट को अलग रखें, और सब कुछ एक भारी वैश्विक स्टोर में अति-केंद्रीकृत करने से बचें।

प्रदर्शन को एक बजट किया हुआ, मापा हुआ अनुशासन मानें

परफॉर्मेंस बजट (बंडल आकार, अनुरोधों की संख्या, और मुख्य मेट्रिक्स पर स्पष्ट सीमाएं) अपनाएं और उन्हें CI में लागू करें ताकि प्रतिगमन (regression) बिल्ड को विफल कर दें। वास्तविक डिवाइसों और नेटवर्कों से वास्तविक-उपयोगकर्ता निगरानी का उपयोग करते हुए Core Web Vitals (लोडिंग, इंटरैक्टिविटी, और विज़ुअल स्थिरता) को ट्रैक करें, न कि केवल तेज़ मशीनों पर लैब परीक्षण। JavaScript को आक्रामक रूप से घटाएं: कोड-स्प्लिट और लेज़ी-लोड करें ताकि उपयोगकर्ता केवल वही डाउनलोड करें जिसकी किसी दिए गए दृश्य को आवश्यकता है, गैर-महत्वपूर्ण काम को स्थगित करें, और भारी लाइब्रेरियों की तुलना में प्लेटफ़ॉर्म क्षमताओं को प्राथमिकता दें। छवियों और फ़ॉन्टों को अनुकूलित करें, प्रभावी रूप से कैश करें, और प्रतिनिधि निम्न-स्तरीय डिवाइसों तथा धीमे कनेक्शनों पर मापें।

प्रोग्रेसिव एन्हांसमेंट और लचीलेपन के साथ बनाएं

एक ऐसी आधार रेखा से शुरू करें जो सिमेंटिक HTML और न्यूनतम या बिना JavaScript के काम करती है, फिर सक्षम क्लाइंटों के लिए सुधार करें। यह सुनिश्चित करता है कि जब स्क्रिप्ट लोड होने में विफल हों, कोई डिवाइस पुराना हो, या नेटवर्क अस्थिर हो (जो एक सीमा-मामले के बजाय एक सामान्य वास्तविकता है) तब भी मूल कार्य संभव रहे। त्रुटियों को सहजता से संभालें: लोडिंग, खाली, त्रुटि, और ऑफ़लाइन स्थितियों के लिए खाली स्क्रीनों या अनंत स्पिनरों के बजाय उपयोगी स्थितियां दिखाएं। उन सेवाओं के लिए जिन पर लोग निर्भर करते हैं, ऑफ़लाइन-पहले तकनीकों पर विचार करें ताकि ऐप रुक-रुक कर होने वाली कनेक्टिविटी के दौरान उपयोग-योग्य बना रहे, कनेक्शन वापस आने पर सिंक करते हुए।

क्रॉस-ब्राउज़र, क्रॉस-डिवाइस, और सहायक संगतता सुनिश्चित करें

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

फ्रंटएंड को साझा इन्फ्रास्ट्रक्चर के रूप में शासित करें

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

समझौते: लाभ और हानि

निर्णयलाभहानि
लोकप्रिय परिपक्व फ्रेमवर्कबड़ा प्रतिभा पूल, स्थिर, समर्थितविरासती बोझ ढो सकता है; नवीनतम फ़ीचरों को अपनाने में धीमा
नवीनतम फ्रेमवर्कआधुनिक फ़ीचर, प्रदर्शन लाभबदलाव का जोखिम, छोटा प्रतिभा पूल, अनिश्चित दीर्घायु
SSR / SSGतेज़ पहला पेंट, SEO, बिना JS के काम करता हैसर्वर या बिल्ड जटिलता, कैशिंग चुनौतियां
CSR (SPA)समृद्ध इंटरैक्टिविटी, ऐप-जैसा अनुभवधीमा पहला लोड, JS-निर्भर, SEO और लचीलेपन की लागत
भारी क्लाइंट JavaScriptसमृद्ध फ़ीचरनिम्न-स्तरीय डिवाइसों पर खराब प्रदर्शन, नाज़ुक
प्रोग्रेसिव एन्हांसमेंटलचीला, समावेशी, हर जगह काम करता हैएक काम करने वाली आधार रेखा परिभाषित करने के लिए अधिक डिज़ाइन प्रयास
माइक्रो-फ्रंटएंडस्वतंत्र टीम डिप्लॉय, स्केलजटिलता, दोहराई गई निर्भरताएं, प्रदर्शन ओवरहेड

बार-बार होने वाला ट्रेड-ऑफ पहुंच, प्रदर्शन, और लचीलेपन बनाम समृद्धि और डेवलपर सुविधा है। भारी क्लाइंट-साइड दृष्टिकोण तेज़ मशीनों पर बनाने और डेमो करने में सुखद होते हैं, लेकिन वे कमज़ोर डिवाइसों और नेटवर्कों पर उपयोगकर्ताओं को बाहर कर देते हैं। एंटरप्राइज़ और विशेष रूप से सरकारी दर्शकों के लिए, संतुलन को प्रदर्शन, प्रोग्रेसिव एन्हांसमेंट, और टिकाऊपन की ओर झुकाएं, क्योंकि उपयोगकर्ताओं को बाहर करने की लागत अधिक होती है और अक्सर बातचीत-योग्य नहीं होती।

अपनी टीम के साथ चर्चा करने के लिए प्रश्न

  1. हम फ्रेमवर्क-विशिष्ट कोड को कैसे अलग रखते हैं ताकि एप्लिकेशन किसी एक लाइब्रेरी के जीवनचक्र का बंधक न बने? दीर्घकालिक एंटरप्राइज़ और सरकारी सिस्टमों के लिए, फ्रेमवर्क बदलाव सबसे बड़ा बचने-योग्य खर्च है: फिर से लिखना महंगा और जोखिम भरा है, और आज की चलन वाली लाइब्रेरी वर्षों तक भर्ती और रखरखाव को सीमित करती है। वेब मानकों पर निर्भर रहना और फ्रेमवर्क-विशिष्ट कोड को स्पष्ट सीमाओं के पीछे रखना का मतलब है कि आपका व्यावसायिक तर्क और आपकी सामग्री अगले फ्रेमवर्क बदलाव से बच जाती है। तय करें कि वे सीमाएं कहां हैं और क्या कोई नया इंजीनियर प्लेटफ़ॉर्म कोड को फ्रेमवर्क कोड से अलग बता सकता है। अपने पिछले फ्रेमवर्क माइग्रेशन की लागत का, या आने वाले माइग्रेशन की लागत का, एक अनुमान लाएं। यदि आपका मुख्य तर्क किसी एक लाइब्रेरी के API से वेल्ड किया हुआ है, तो फ्रेमवर्क विकल्प का बचाव करने से पहले उस युग्मन की कीमत लगाएं।

  2. क्या हम रेंडरिंग रणनीति को प्रति मार्ग मिलाते हैं, या पूरे उत्पाद पर एक रणनीति थोपते हैं? सर्वर-साइड रेंडरिंग सार्वजनिक सामग्री के लिए तेज़ पहला पेंट देती है और बिना क्लाइंट JavaScript के काम करती है, स्टैटिक जनरेशन कम-कम बदलने वाले पेजों के लिए गति को अधिकतम करता है, और क्लाइंट रेंडरिंग लॉगिन के पीछे इंटरैक्टिव ऐप-जैसी सतहों के लिए उपयुक्त है। वैश्विक रूप से एक को थोपना या तो भारी JavaScript के साथ सार्वजनिक पेजों को धीमा करता है या एक सरल सामग्री पेज को अति-इंजीनियर कर देता है। यह सरकार के लिए एक पहुंच का प्रश्न है, जहां एक सेवा जो केवल एक बड़े बंडल के लोड होने के बाद काम करती है, पुराने डिवाइसों और धीमे कनेक्शनों वाले उपयोगकर्ताओं को बाहर कर देती है। अपने मुख्य मार्ग लाएं और प्रत्येक को उस रणनीति से लेबल करें जो वह आज वास्तव में उपयोग करता है। यदि किसी सार्वजनिक-सामना करने वाले पेज को अपनी सामग्री दिखाने के लिए JavaScript की आवश्यकता है, तो तय करें कि यह एक जानबूझकर लिया गया विकल्प है या एक दुर्घटना।

  3. हमारा स्टेट प्रबंधन कितना अनुशासित है, और क्या हम सब कुछ एक भारी वैश्विक स्टोर में अति-केंद्रीकृत कर रहे हैं? सर्वर स्टेट, URL स्टेट, और स्थानीय UI स्टेट को अलग रखना उस युग्मन और री-रेंडर तूफ़ानों को रोकता है जो बड़े फ्रंटएंड को धीमा और नाज़ुक बनाते हैं, फिर भी लुभावना डिफ़ॉल्ट सब कुछ एक वैश्विक स्टोर में डाल देना है। यह बड़े पैमाने पर बढ़ जाता है, जहां एक साझा स्टोर को छूने वाली कई टीमें छुपी हुई निर्भरताएं और अप्रत्याशित प्रदर्शन बनाती हैं। इस पर सहमत हों कि हर प्रकार का स्टेट कहां है और वैश्विक स्टोर में क्या नहीं है। ऐसा कंपोनेंट लाएं जो जितना चाहिए उससे अधिक री-रेंडर होता है और पता लगाएं क्यों। यदि उत्तर एक फूला हुआ केंद्रीय स्टोर है, तो युग्मन के कठोर होने से पहले सीमाएं तय करें।

  4. हमारे परफॉर्मेंस बजट क्या हैं, क्या वे CI में बिल्ड-विफल करने वाले हैं, और क्या उन्हें उन डिवाइसों पर मापा जाता है जो हमारे उपयोगकर्ताओं के पास वास्तव में हैं? एक बजट जिसे कोई लागू नहीं करता वह एक इच्छा है, और एक बजट जो केवल टीम के तेज़ लैपटॉप पर मापा जाता है वह एक ऐसे उपयोगकर्ता का वर्णन करता है जो मौजूद नहीं है। किसी बड़े संगठन के लिए, बजट वह एकमात्र तंत्र है जो बंडल आकार और Core Web Vitals को नियंत्रण में रखता है क्योंकि दर्जनों टीमें एक साझा सतह में फ़ीचर जोड़ती हैं, क्योंकि कोई एक समीक्षक आंखों से हर प्रतिगमन नहीं पकड़ सकता। प्रतिस्पर्धी दबाव डिलीवरी गति है: कुछ किलोबाइट पर एक कठोर बिल्ड विफलता तब तक बाधाकारी लगती है जब तक आप उस त्याग की कीमत नहीं लगाते जिसे यह रोकता है। अपने वर्तमान बजट, निम्न-स्तरीय डिवाइसों और धीमे कनेक्शनों से वास्तविक-उपयोगकर्ता निगरानी डेटा, और उन रिलीज़ों की सूची लाएं जहां एक प्रतिगमन फिसल गया। सरकार में, जहां जनादेश पूरी जनता की सेवा करना है जिसमें पुराने फ़ोनों और मीटर्ड डेटा वाले लोग शामिल हैं, बजट को माध्य के बजाय अपने सबसे धीमे दसवें हिस्से के उपयोगकर्ताओं से जोड़ें, और CI गेट को बातचीत-योग्य न बनाएं।

  5. हमारी कौन-सी सेवाओं को बिना क्लाइंट JavaScript के काम करते रहना चाहिए, और क्या हमने वास्तव में उस पथ का परीक्षण किया है? प्रोग्रेसिव एन्हांसमेंट का दावा करना आसान है और चुपचाप तोड़ना भी आसान है, क्योंकि सुधारा गया पथ वह है जिसका डेवलपर हर दिन उपयोग करते हैं जबकि आधार रेखा अपरीक्षित सड़ती रहती है। इसे जानबूझकर तय करना बड़े पैमाने पर मायने रखता है, क्योंकि एक प्लेटफ़ॉर्म पर शिप करने वाली कई टीमें में से हर एक यह मान लेगी कि स्क्रिप्ट हमेशा लोड होती हैं जब तक कोई साझा मानक अन्यथा न कहे, और एक ही कठोर निर्भरता किसी के लिए भी मुख्य कार्य तोड़ सकती है जिसका बंडल विफल हो जाता है। ट्रेड-ऑफ वास्तविक है: एक काम करने वाली बिना-JavaScript आधार रेखा डिज़ाइन प्रयास की कीमत लगाती है और इंटरैक्टिविटी बनाने के तरीके को सीमित करती है। अपनी महत्वपूर्ण उपयोगकर्ता यात्राएं लाएं, एक परीक्षण जो प्रत्येक को स्क्रिप्ट अक्षम या विफल के साथ लोड करता है, और यह प्रमाण कि क्षेत्र में स्क्रिप्ट वास्तव में कितनी बार लोड होने में विफल होती हैं। किसी सार्वजनिक सेवा के लिए, एक लाभ या कर फ़ॉर्म जो एक स्क्रिप्ट के टाइमआउट होने पर ढह जाता है वह एक क्षरित अनुभव नहीं है, यह एक ऐसा नागरिक है जो एक कानूनी दायित्व पूरा नहीं कर सकता, इसलिए आधार रेखा को एक शालीनता के बजाय एक अनुपालन आवश्यकता मानें।

  6. माइक्रो-फ्रंटएंड वास्तव में अपनी जटिलता की कीमत कब वसूल करते हैं, और किसी टीम के उनकी ओर जाने से पहले यह कौन तय करता है? स्वतंत्र टीम डिप्लॉय आकर्षक हैं, लेकिन माइक्रो-फ्रंटएंड वितरित-सिस्टम जटिलता, दोहराई गई निर्भरताएं, और एक प्रदर्शन कर ढोते हैं जो उपयोगकर्ता धीमे लोड में चुकाते हैं। बिना किसी साझा निर्णय बिंदु के, महत्वाकांक्षी टीमें उन्हें संगठनात्मक सुविधा के लिए बहुत पहले अपना लेती हैं, इससे पहले कि पैमाना लागत को न्यायोचित ठहराए, और पूरा उत्पाद उस ओवरहेड को विरासत में पाता है। प्रतिस्पर्धी विचार स्वायत्तता है: एक साझा कोडबेस पर शिप करने वाली टीमें एक-दूसरे को रोक सकती हैं, और वास्तविक पैमाने पर वह युग्मन अपनी ही एक महंगी समस्या है। सतह को छूने वाली टीमों की संख्या, आप आज वास्तव में जो डिप्लॉय प्रतिस्पर्धा अनुभव करते हैं, और एक विभाजन जो पेलोड दोहराव पेश करेगा उसका मापा गया अनुमान लाएं। एंटरप्राइज़ और सरकारी प्लेटफ़ॉर्मों के लिए, जहां आर्किटेक्चर निर्णय कई टीमों को वर्षों तक बांधते हैं और ऑडिट व हैंडओवर से बचने चाहिए, एक स्पष्ट, दस्तावेज़ीकृत सीमा और एक स्वामी की आवश्यकता रखें जो कदम को स्वीकृत करे, न कि हर टीम को अलगाव में तय करने दें।

क्षेत्रीय दृष्टिकोण

स्टार्टअप। जब हर साइनअप मायने रखता है तो गति और पहुंच दोनों मायने रखते हैं, इसलिए सार्वजनिक पेजों के लिए भारी सिंगल-पेज ऐप का विरोध करें। अपनी मार्केटिंग और साइनअप प्रवाह को सर्वर-रेंडर करें ताकि वे उन मध्यम-श्रेणी के फ़ोनों और अनियमित डेटा पर तेज़ी से लोड हों जिनका आपके शुरुआती ग्राहक उपयोग करते हैं, और क्लाइंट-साइड इंटरैक्टिविटी को लॉगिन के पीछे के ऐप के लिए सुरक्षित रखें। CI में एक सरल बंडल-आकार बजट सेट करें ताकि कोई लापरवाह निर्भरता चुपचाप पेज को फुला न दे, और जैसे-जैसे आप भर्ती करते हैं एक छोटे कोडबेस को बनाए रखने-योग्य रखने के लिए वेब मानकों पर निर्भर रहें।

छोटा व्यवसाय। बिना किसी समर्पित फ्रंटएंड विशेषज्ञ और एक तंग बजट के साथ, किसी भी कस्टम चीज़ की तुलना में एक अच्छी तरह समर्थित मुख्यधारा फ्रेमवर्क या एक होस्टेड साइट बिल्डर को प्राथमिकता दें, ताकि आप एक बड़े प्रतिभा पूल से भर्ती कर रहे हों और रखरखाव खरीद रहे हों, उसे स्टाफ़ नहीं कर रहे हों। चुनाव को टिकाऊपन के रूप में फ्रेम करें: सबसे सस्ता विकल्प वह है जिसे आपको दो साल में फिर से लिखने के लिए मजबूर नहीं किया जाता। शुरुआत से ही तेज़, मोबाइल-अनुकूल पेजों और एक्सेसिबल मार्कअप पर ज़ोर दें, क्योंकि एक धीमा या टूटा हुआ चेकआउट आपको ऐसे ग्राहक खोने की कीमत चुकाता है जिन्हें आप खोने का जोखिम नहीं उठा सकते।

एंटरप्राइज़। समस्या कई टीमों में संगति है: एक साझा कंपोनेंट लाइब्रेरी, सहमत आर्किटेक्चरल पैटर्न, लिंटिंग और बिल्ड टूलिंग, और CI में लागू किए गए परफॉर्मेंस बजट ताकि कोई टीम चुपचाप पूरे को प्रतिगामी न बना सके। नवीनता के बजाय दीर्घायु और भर्ती के लिए फ्रेमवर्क चुनें, अगले माइग्रेशन से बचने के लिए फ्रेमवर्क-विशिष्ट कोड को सीमाओं के पीछे अलग करें, और रेंडरिंग रणनीति को प्रति सतह मिलाएं। फ्रंटएंड को वास्तविक-उपयोगकर्ता निगरानी, गवर्नेंस, और हर आर्किटेक्चरल विकल्प क्यों लिया गया इसके ऑडिट-योग्य रिकॉर्ड के साथ साझा इन्फ्रास्ट्रक्चर के रूप में प्रबंधित करें।

सरकार। आप पूरी जनता की सेवा करते हैं, जिसमें पुराने डिवाइसों, धीमे या मीटर्ड कनेक्शनों, और सहायक तकनीकों वाले लोग शामिल हैं, इसलिए प्रोग्रेसिव एन्हांसमेंट और प्रदर्शन दायित्व हैं, चमक-दमक नहीं। नागरिक-सामना करने वाली सेवाओं के लिए एक काम करने वाली बिना-JavaScript आधार रेखा को एक कठोर नियम बनाएं, माध्य के बजाय सबसे धीमे उपयोगकर्ताओं के लिए पेजों को बजट करें, और जब कोई स्क्रिप्ट विफल हो जाए तब भी मुख्य कार्य को पूरा-योग्य रखें। खरीद और पारदर्शिता लागू होती है: टिकाऊ, मानक-झुकाव वाली तकनीक को प्राथमिकता दें जो एकल-विक्रेता लॉक-इन से बचती है, अनुबंधों में एक्सेसिबिलिटी और प्रदर्शन आवश्यकताओं को दस्तावेज़ीकृत करें, और यह दिखाने में सक्षम रहें कि सेवा सबसे कम-सुविधाप्राप्त उपयोगकर्ता के लिए काम करती है, केवल डेमो डिवाइस के लिए नहीं।

उदाहरण

स्टार्टअप। एक सीड-चरण स्टार्टअप अपनी मार्केटिंग साइट और साइनअप प्रवाह को एक भारी सिंगल-पेज ऐप के रूप में बनाने के लिए ललचाई थी, लेकिन उनके लक्षित ग्राहक अक्सर अनियमित मोबाइल डेटा पर मध्यम-श्रेणी के फ़ोन पर खरीदारी करने वाले थे। दोनों संस्थापकों ने इसके बजाय सार्वजनिक पेजों को सर्वर-रेंडर किया ताकि वे तेज़ी से लोड हों और किसी भी JavaScript के चलने से पहले काम करें, और क्लाइंट-साइड इंटरैक्टिविटी को लॉगिन के पीछे के ऐप के लिए सुरक्षित रखा। उन्होंने CI में एक सरल बंडल-आकार बजट सेट किया ताकि कोई लापरवाह निर्भरता चुपचाप पेज को फुला न दे। दुबले, तेज़ पहले लोड ने साइनअप को मापने योग्य रूप से सुधारा, और वेब मानकों पर निर्भर रहने से उनके छोटे कोडबेस को भर्ती करते समय बनाए रखना आसान रहा।

एंटरप्राइज़। एक वित्तीय सेवा फर्म ने एक परिपक्व फ्रेमवर्क, एक साझा कंपोनेंट लाइब्रेरी, और CI में लागू किए गए परफॉर्मेंस बजट को मानकीकृत करके आंतरिक और ग्राहक एप्लिकेशनों के एक व्यापक समूह को आधुनिक बनाया। रेंडरिंग रणनीति प्रति सतह चुनी गई: सार्वजनिक मार्केटिंग और सामग्री के लिए सर्वर-रेंडर किए गए, कैश-योग्य पेज, और इंटरैक्टिव डैशबोर्डों के लिए लॉगिन के पीछे एक क्लाइंट-रेंडर किया गया एप्लिकेशन। बंडल बजट और वास्तविक-उपयोगकर्ता निगरानी ने रिलीज़ से पहले प्रतिगमनों को पकड़ा, फर्म की कई टीमों में लोड समय तेज़ रखते हुए और फ्रेमवर्क-बदलाव के उस जोखिम को घटाते हुए जिसने पहले महंगे पुनर्लेखनों को मजबूर किया था।

सरकार। एक राष्ट्रीय डिजिटल सेवा टीम ने नागरिक-सामना करने वाली सेवाओं को एक कठोर नियम के रूप में प्रोग्रेसिव एन्हांसमेंट के साथ बनाया: हर सेवा पहले सिमेंटिक HTML और सर्वर रेंडरिंग के साथ काम करती है, और JavaScript केवल सुधार करता है। यह गारंटी देता है कि सेवा पुराने फ़ोनों, धीमे ग्रामीण कनेक्शनों, और सहायक तकनीकों पर काम करती है, ऐसी आबादी जिसे कोई सरकार बाहर नहीं कर सकती। परफॉर्मेंस बजट पेजों को निम्न-स्तरीय डिवाइसों पर हल्का और तेज़ रखते हैं, और सहज क्षरण का मतलब है कि एक विफल स्क्रिप्ट कभी किसी को लाभ आवेदन पूरा करने से नहीं रोकती। परिणाम एक ऐसी सेवा है जो तेज़, लचीली, सुलभ, और पूरी जनता द्वारा उपयोग-योग्य है।

व्यावसायिक मामला: प्रेरणाएं, ROI, और TCO

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

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

नेतृत्व के सामने मामला रखने के लिए, Core Web Vitals और लोड समय को रूपांतरण तथा पूर्णता फ़नल से जोड़ें, भारी क्लाइंट-साइड दृष्टिकोणों द्वारा बाहर किए गए उपयोगकर्ताओं की मात्रा निर्धारित करें, और अतीत या आसन्न पुनर्लेखनों की लागत को एक टिकाऊ, मानक-झुकाव वाले आर्किटेक्चर की स्थिरता के विरुद्ध लगाएं। परफॉर्मेंस बजट और प्रोग्रेसिव एन्हांसमेंट को जोखिम घटाने और पहुंच विस्तार के रूप में फ्रेम करें।

एंटी-पैटर्न और नुकसान

  • फ्रेमवर्क का पीछा करना: नवीनतम लाइब्रेरी पर फिर से लिखना, उपयोगकर्ता लाभ के बिना बदलाव उठाना।
  • केवल-JavaScript अनुभव: जब तक एक बड़ा बंडल लोड और चल नहीं जाता तब तक कुछ भी काम नहीं करता, कई उपयोगकर्ताओं को बाहर करता है।
  • केवल तेज़ डिवाइसों पर परीक्षण: टीम के फ्लैगशिप लैपटॉप असली उपयोगकर्ता अनुभव छुपा देते हैं।
  • बंडल आकार की अनदेखी: पेज हर जगह धीमे होने तक असीमित निर्भरता वृद्धि।
  • कोई परफॉर्मेंस बजट नहीं: प्रतिगमन रिलीज़-दर-रिलीज़ चुपचाप जमा होते जाते हैं।
  • खाली-स्क्रीन विफलताएं: कोई लोडिंग, खाली, त्रुटि, या ऑफ़लाइन स्थिति नहीं; एक विफल अनुरोध पेज को तोड़ देता है।
  • अति-केंद्रीकृत वैश्विक स्टेट: सब कुछ एक स्टोर में, युग्मन और री-रेंडर तूफ़ान बनाना।
  • समयपूर्व माइक्रो-फ्रंटएंड: पैमाने के बिना वितरित-सिस्टम जटिलता और दोहराए गए पेलोड जो उन्हें न्यायोचित ठहराते हों।
  • आर्किटेक्चर में एक्सेसिबिलिटी और i18n की उपेक्षा: उन्हें बाद में उच्च लागत पर जोड़ना।

परिपक्वता मॉडल

स्तर 1: आरंभ। तदर्थ फ्रंटएंड जो हर टीम द्वारा बिना किसी साझा मानक के बनाया गया है। भारी क्लाइंट-साइड कोड, कोई परफॉर्मेंस बजट नहीं, केवल टीम के अपने डिवाइसों पर परीक्षण किया गया। फ्रेमवर्क विकल्प पसंद या प्रचार से बनाए गए, और एक विफल स्क्रिप्ट उपयोगकर्ताओं को खाली स्क्रीन देखते रहने पर छोड़ सकती है।

स्तर 2: विकास। कुछ टीमें साझा टूलिंग और एक कंपोनेंट लाइब्रेरी अपनाती हैं, लेकिन अभ्यास संगठन भर में असंगत है। प्रदर्शन कभी-कभार मापा जाता है, बजट या लागू नहीं किया जाता। रेंडरिंग रणनीति अक्सर सामग्री प्रकार की परवाह किए बिना एकसमान होती है, और क्रॉस-डिवाइस परीक्षण सीमित और मैनुअल है।

स्तर 3: मानकीकरण। फ्रेमवर्क और आर्किटेक्चर दीर्घायु के लिए जानबूझकर चुने जाते हैं, और विकल्प दस्तावेज़ीकृत और संगठन भर में लागू किए जाते हैं। रेंडरिंग रणनीति प्रति सतह मिलाई जाती है, प्रोग्रेसिव एन्हांसमेंट और सहज क्षरण मानक हैं, और साझा कंपोनेंट लाइब्रेरियां, लिंटिंग, और बिल्ड टूलिंग हर टीम पर लागू होती हैं। क्रॉस-ब्राउज़र, एक्सेसिबिलिटी, और अंतरराष्ट्रीयकरण बाद में जोड़े जाने के बजाय शुरू से बनाए गए हैं।

स्तर 4: प्रबंधन। फ्रंटएंड को डेटा से मापा और नियंत्रित किया जाता है। परफॉर्मेंस बजट CI में लागू किए जाते हैं ताकि प्रतिगमन बिल्ड को विफल कर दें, और Core Web Vitals को वास्तविक निम्न-स्तरीय डिवाइसों और धीमे कनेक्शनों से वास्तविक-उपयोगकर्ता निगरानी के साथ स्पष्ट आधार रेखाओं के विरुद्ध ट्रैक किया जाता है। बंडल आकार, त्रुटि और ऑफ़लाइन-स्थिति कवरेज, और सबसे धीमे कनेक्शनों पर सेवा किए गए उपयोगकर्ताओं का हिस्सा रिपोर्ट और समीक्षा किया जाता है, ताकि निर्णय राय के बजाय प्रमाण पर टिके रहें।

स्तर 5: ऑर्केस्ट्रेट। प्रदर्शन, लचीलापन, और पहुंच को पूरे संगठन में निरंतर सुधारा जाता है और व्यावसायिक परिणामों से जोड़ा जाता है। फ्रंटएंड टिकाऊपन के लिए वेब मानकों पर निर्भर रहता है, माइग्रेशन को सस्ता रखने के लिए फ्रेमवर्क निर्भरताओं को अलग रखता है, और डिवाइसों, प्लेटफ़ॉर्म, और वास्तविक-उपयोगकर्ता डेटा बदलने पर आर्किटेक्चर को अनुकूल रूप से विकसित करता है। पूरी जनता और सभी डिवाइस प्रथम-श्रेणी हैं, और फ्रंटएंड अभ्यास को एक अलग चिंता के बजाय डिज़ाइन, एक्सेसिबिलिटी, और उत्पाद योजना के साथ एकीकृत किया जाता है।

चर्चा के लिए विचार

  • आप कैसे तय करते हैं कि कोई फ्रेमवर्क माइग्रेशन अपनी लागत और जोखिम के लायक है?
  • कौन-से Core Web Vitals और बंडल बजट कठोर बिल्ड-विफल करने वाली सीमाएं होनी चाहिए?
  • प्रोग्रेसिव एन्हांसमेंट कहां आवश्यक है, और कहां एक क्लाइंट-साइड ऐप स्वीकार्य है?
  • आप कई स्वायत्त टीमों में फ्रंटएंड आर्किटेक्चर को कैसे सुसंगत रखते हैं?
  • माइक्रो-फ्रंटएंड वास्तव में अपनी जटिलता की कीमत कब वसूल करते हैं?
  • असली-डिवाइस और धीमे-नेटवर्क परीक्षण को पाइपलाइन में कैसे बनाया जाना चाहिए?

मुख्य निष्कर्ष

  • फ्रंटएंड एक ऐसे वातावरण में चलता है जिसे आप नियंत्रित नहीं करते: परिवर्तनशीलता और विफलता के लिए डिज़ाइन करें।
  • दीर्घकालिक सिस्टमों के लिए टिकाऊ, अच्छी तरह समर्थित तकनीक चुनें; वेब मानकों पर निर्भर रहें।
  • रेंडरिंग रणनीति (SSR, SSG, CSR, स्ट्रीमिंग) को सामग्री और आवश्यकता से मिलाएं, अक्सर प्रति मार्ग मिलाकर।
  • प्रदर्शन को वास्तविक-उपयोगकर्ता डेटा के साथ CI में लागू किया गया एक बजट किया हुआ, मापा हुआ अनुशासन मानें।
  • प्रोग्रेसिव एन्हांसमेंट के साथ बनाएं ताकि मूल अनुभव हर जगह काम करे।
  • कम JavaScript शिप करें; कोड-स्प्लिट करें, लेज़ी-लोड करें, और प्लेटफ़ॉर्म क्षमताओं को प्राथमिकता दें।
  • विशेष रूप से सरकार के लिए, प्रदर्शन और लचीलापन समान पहुंच के लिए पूर्व-शर्तें हैं।

संदर्भ और आगे पढ़ने के लिए

  • Jeremy Keith, Resilient Web Design
  • Aaron Gustafson, Adaptive Web Design (progressive enhancement)
  • Steve Souders, High Performance Web Sites
  • Ilya Grigorik, High Performance Browser Networking
  • Addy Osmani, writings on performance, code-splitting, and the cost of JavaScript
  • Google, Web Vitals and web.dev performance guidance
  • MDN Web Docs, web platform and progressive enhancement references
  • Alex Russell, essays on the cost of JavaScript and device diversity
  • UK Government Digital Service, progressive enhancement and frontend guidance
  • WHATWG HTML Living Standard and W3C web platform specifications