शुद्ध मोर्चा अंत जावास्क्रिप्ट के साथ वेब एपीआई बनाम MVC विचारों के साथ AJAX


13

वेब एप्लिकेशन को विभाजित करने के तरीके पर इन दिनों लोगों के विचार क्या हैं, इसके लिए यह अधिक चर्चा थी।

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

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

मेरा सवाल यह है कि। क्या इस पुरातन पर मेरे विचार हैं क्योंकि मैं शुद्ध फ्रंट एंड बैकग्राउंड के बजाय .net बैकग्राउंड से आता हूं?

एक बुद्धिमान फ्रंट एंड डेवलपर, जिसके साथ मैं काम करता हूं, एमवीसी के विचारों में अधिक या कम कुछ नहीं करना पसंद करता है, और आगे के छोर पर सब कुछ करना होगा। वेब API राइट डाउन पेज को पॉप्युलेट करता है। ताकि MVC एक्शन विधि को कॉल करने के बजाय, जो HTML लौटाता है, वह पृष्ठ के सभी तत्वों को बनाने के लिए एक मानक ऑब्जेक्ट को वापस करना और जावास्क्रिप्ट का उपयोग करना पसंद करेगा।

फ्रंट एंड डेवलपर तरीके का अर्थ है कि एमवीसी मॉडल सत्यापन के साथ सामान्य रूप से ग्राहक लाभ सत्यापन सहित मुझे मिलने वाला कोई भी लाभ होगा। इसका मतलब यह भी है कि मुझे किसी भी तरह के लाभ जो कि विचारों को बनाने के साथ हैं, दृढ़ता से टाइप किए गए html टेम्प्लेट आदि के साथ चले जाएंगे।

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

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

इस पर सभी के क्या विचार हैं?

मुझे फ्रंट एंड देवों और बैक एंड देवों से सुनने का शौक है।


एपीआई और ग्राहक को अलग करने के बारे में एसओ पर इसी तरह की चर्चा stackoverflow.com/questions/10941249/…
डॉन चेडल

जवाबों:


9

मुझे यह भी संदेह है कि हर नए वेब ऐप के लिए एक एसपीए होना जरूरी है, लेकिन एक बात मैं 100% पर एक सामान्यवादी के रूप में बेच रहा हूं जो क्लाइंट अनुभव पर अपने अनुभव के थोक के साथ है, जो एक सेवा-उन्मुख वास्तुकला है जो कच्चे हाथों से बंद है क्लाइंट के लिए HTML के बजाय डेटा यह जाने का तरीका है कि क्या आप सर्वर से पूर्वनिर्मित पृष्ठों / विचारों को लोड कर रहे हैं और पृष्ठ लोड होने के बाद डेटा के साथ बहुत अधिक गतिशील सामान कर रहे हैं या जावास्क्रिप्ट के साथ लगभग 100% निर्माण कर रहे हैं।

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

और किस उपकरण का उपयोग किसी अन्य डिवाइस के लिए फ्रंट एंड के लिए बैकएंड आर्किटेक्चर है जिसे लागू करने वाले विजेट की तरह कुछ विदेशी करने की आवश्यकता हो सकती है जो 100% कैनवास या पूरी तरह से अलग HTML संरचना है? क्‍लाइंट-साइड देव को दृश्‍य स्‍टूडियो लोड करना होगा या कड़ाई से प्रेजेंटेशनल ट्वीक बनाने के लिए बैक एंड देव्स डोर को खटखटाना चाहिए?

दृढ़ता से टाइप किए गए टेम्प्लेट सत्यापन के नुकसान के बारे में आपकी चिंताओं के लिए, मुझ पर विश्वास करें जब मैं कहता हूं कि यदि आप एक सक्षम क्लाइंट-साइड देव के साथ काम कर रहे हैं, तो आपको कोई .NET फ्रेमवर्क या विज़ुअल स्टूडियो टूल नहीं मिलेगा जो अधिक कोयला-से- डायमंड-टू-डस्ट-क्रशली एनल के बारे में अच्छी तरह से गठित, मान्य एचटीएमएल के मुकाबले।

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

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


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

5

मैं अपने अत्यधिक व्यक्तिपरक 2 पैसे की पेशकश करूंगा (जो इसके लायक है;))। इसका कोई सही या गलत उत्तर नहीं है और उदाहरण के लिए आपके बिंदुओं के अलावा कई वास्तविक दुनिया के विचार हैं:

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

यह सूची किसी भी तरह से संपूर्ण नहीं है और एक ग्राहक पक्ष को कोसने जैसा लगता है जो मेरा इरादा नहीं है, मैंने साइटों को सामने के छोर पर भारी जोर दिया है।

मेरे लिए यह वास्तव में उपयोगकर्ता अनुभव और एपीआई पुनः प्रयोज्य के लिए नीचे आता है। इनमें से प्रत्येक को संबोधित करने के लिए।

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

शुद्ध फ्रंट एंड सॉल्यूशन के लिए सबसे मजबूत तर्क (मेरी राय में) उपयोगकर्ता अनुभव का है।

क्या (जब सभी डाउनसाइड्स पर विचार करते हुए) एक शुद्ध जावास्क्रिप्ट ब्राउज़र एप्लिकेशन एक पारंपरिक वेबसाइट पर प्रयोज्य और उपयोगकर्ता अनुभव पर पर्याप्त सुधार प्रदान करता है?

देशी अनुप्रयोगों की तरह काम करने वाली साइटें बनाते समय; मेरा तर्क है कि उत्तर एक स्पष्ट हाँ है। हालांकि अधिकांश साइटें इस क्लीन कट नहीं हैं, लेकिन यह आकलन करने की बात है कि क्या व्यक्तिगत उपयोगकर्ता वर्कफ़्लोज़ एक अत्यधिक गतिशील इंटरफ़ेस से लाभ उठाते हैं।

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


दिलचस्प अंक।
नेत्रगोलक

3

मेरे सामने अंत के भारी अनुप्रयोगों के साथ एक प्रेम-घृणा संबंध है।

एक तरफ, मुझे जावास्क्रिप्ट लिखना पसंद है और मैं ब्राउज़र को निष्पादन परिवेश के रूप में पसंद करता हूं।

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

तकनीकी अंतर के लिए:

एक आंशिक प्रतिपादन और इसे ग्राहक तक पहुँचाना:

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

JSON वितरित करना और क्लाइंट साइड टेम्प्लेट प्रस्तुत करना:

  • HTML की तुलना में एक छोटा HTTP पेलोड हो सकता है, जो अविश्वसनीय या धीमे नेटवर्क कनेक्शन पर एप्लिकेशन को अधिक उत्तरदायी लग सकता है
  • कई जावास्क्रिप्ट टेम्प्लेटिंग भाषाएं पूरी तरह से चित्रित की जाती हैं, जिसका अर्थ है कि हमें कुछ HTML बनाने के लिए बैकएंड की आवश्यकता नहीं है

कभी-कभी मुझे लगता है कि नए जावास्क्रिप्ट फ्रेमवर्क बच्चे को स्नान के पानी के साथ बाहर फेंक रहे हैं --- आदमी मुझे आशा है कि मैं एक क्रोधी कूर्मड्यूगर प्रोग्रामर नहीं बन रहा हूं ...


1
किसी भी प्रकार के तर्क का दोहराव एक ऐसा मुद्दा है जिसके बारे में मैं भी सोचता रहा हूं। लेकिन कुछ रोचक बाते।
नेत्रगोलक

0

अपने अंतिम आवेदन में मैंने REST एपी और जावास्क्रिप्ट फ्रंट-एंड को संयुक्त किया।

मैंने जो किया वह था:

  • मैंने CRUD ऑपरेशन के लिए REST API बनाया।
  • मैंने एक जावास्क्रिप्ट एप्लिकेशन बनाया है जो प्री-डिफाइंड HTML टेम्प्लेट लोड करता है और REST API से लौटाए गए डेटा के साथ पॉप्युलेट करता है।

मूल रूप से JS फ्रंट-एंड CRUD ऑपरेशन के लिए REST API के साथ संचार करता है और HTML को लौटाए गए डेटा या बनाए गए डेटा के साथ पॉप्युलेट करता है, या हटाए गए डेटा या अपडेट किए गए डेटा को हटाता है।

इस प्रकार हमारे पास शुद्ध एचटीएमएल है, हमारे पास क्लाइंट पर किया गया प्रोसेसिंग है, हमारे पास सभी एचटीएमएल को लोड नहीं करने के लिए कम बैंडविड्थ का उपयोग है और उपयोगकर्ताओं को सही मायने में वेब 2.0 का अनुभव दे सकता है।

मैं सुरक्षा और कोड दोहराव के लिए सामने के छोर पर व्यावसायिक सत्यापन नहीं करता हूं, क्योंकि कोई भी सर्वर पर भेजने से पहले डेटा को बदल सकता है और हमें सर्वर पर डेटा को फिर से मान्य करना होगा। इसलिए, यह आसानी से हैक हो जाएगा। सभी सत्यापन बैक-एंड पर किए जाते हैं। क्लाइंट-साइड पर सत्यापन केवल इनपुट के प्रकारों के लिए किए जाते हैं।

पेशेवरों:

  • जेएस द्वारा उत्पन्न नहीं होने के कारण HTML में परिवर्तन करने की सुविधा;
  • अजाक्स और JSON का उपयोग करके बैंडविड्थ की कम खपत;
  • सर्वर प्रोसेसिंग की कम खपत, क्योंकि एचटीएमएल क्लाइंट साइड पर आबाद है;
  • स्क्रीन को बदलने के लिए जेएस का उपयोग करके उपयोगकर्ता के बेहतर अनुभव, प्रभाव का उपयोग करने और रेंडरिंग गति को बढ़ाने की अनुमति देता है।
  • REST का उपयोग करके, HTTP प्रोटोकॉल का बेहतर उपयोग।

विपक्ष:

  • बनाए रखने के लिए 2 आवेदन;
  • क्लाइंट प्रोसेसिंग पर निर्भर करता है, जो खराब हार्डवेयर के कारण खराब हो सकता है।

उम्मीद है की यह मदद करेगा।

सादर,


क्लाइंट स्केल पर प्रोसेसिंग का काम बेहतर है। सर्वर को आमतौर पर बहुत सारे अन्य अनुप्रयोग चलाने होते हैं जो सर्वर संसाधनों का भी उपभोग करते हैं। यदि सर्वर क्रैश होता है तो सभी को नुकसान होता है।
ColacX

मुझे आपकी बात समझ में नहीं आई। लेकिन अगर सर्वर क्रैश हो जाता है, तो कोई फर्क नहीं पड़ता कि आप किस वास्तुकला को चुनते हैं, हर कोई पीड़ित है।
ब्रूनो जोओ

जिसके कारण आपको सर्वर को कम काम करना चाहिए। और कम जटिल तर्क है। इस प्रकार सर्वर पर तनाव को कम करने। इस प्रकार सर्वर क्रैश के जोखिम को कम करता है। हालांकि वे अभी भी हो सकता है वे कम बार होना चाहिए। आमतौर पर जब आप कोई अपडेट करते हैं, तो आप बग को शुरू करने का जोखिम उठाते हैं। सर्वर पर कम अपडेट करें। क्लाइंट पर जितना संभव हो उतना काम रखें।
ColacX

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.