एक HTML / जावास्क्रिप्ट के पेशेवरों और विपक्ष केवल वेब ऐप [बंद]


35

मैं एक ASP.NET रूपों की पृष्ठभूमि से आता हूं और सर्वर साइड कोडिंग को अतीत में बहुत शक्तिशाली पाया है। हाल ही में, हालांकि, मैं फ्रंट-एंड के सर्वर साइड कोड को चरणबद्ध करना चाहता हूं और इसे शुद्ध HTML / जावास्क्रिप्ट के साथ बदलना चाहता हूं, जो JSON वेबसर्विस के माध्यम से डेटा तक पहुंचता है। मुझे इसमें कोई वास्तविक अनुभव नहीं है, और इसलिए मैं यह सुनना चाहूंगा कि क्या यह एक आजमाया हुआ मॉडल है। इसके अलावा, इसके आसपास के नुकसान क्या हैं?

मुझे ASP.NET उपयोगकर्ता नियंत्रण बहुत उपयोगी लगता है, इसलिए मैं सर्वर पर अलग HTML फ़ाइलों में मार्कअप टेम्पलेट संग्रहीत करके इसके पीछे सिद्धांत रखना चाहता हूं। इन्हें क्रमशः jQuery AJAX और jQuery HTML टेम्प्लेट प्लगइन के माध्यम से पुनर्प्राप्त और उपयोग किया जाएगा।

किसी भी इनपुट बहुत सराहना की जाएगी।

PS नोबल प्रश्न के लिए क्षमा करें, लेकिन क्या इस प्रकार की वेब आर्किटेक्चर को वेब 2.0 के रूप में संदर्भित किया जाता है या क्या मैं पूरी तरह से बंद हूं?


1
क्या आप asp.net नियंत्रणों को HTML / JavaScript से बदलना चाहते हैं या क्या आप सामने के अंत तक संपूर्ण व्यावसायिक तर्क (सत्यापन, आदि) को उजागर करना चाहते हैं?
šljaker

1
अच्छा प्रश्न। मैं पृष्ठ को हल्का करने के लिए केवल html / जावास्क्रिप्ट में फ्रंटएंड करने की सोच रहा हूं ताकि यह मोबाइल / पैड पर तेज हो। तो शायद बस asp.net नियंत्रण की जगह। सभी को सर्वर से एक webservice के माध्यम से कॉल करता है, इसलिए wcf सेवा को किसी तरह सत्यापन आदि से निपटना चाहिए। क्या आपको लगता है कि यह संभव है?
होफनरविले

मैं यहाँ इसी तरह के प्रश्न पूछ रहा हूँ: stackoverflow.com/questions/34020543/… और यहाँ: stackoverflow.com/questions/33934101/…
smwikipedia

सत्यापन के लिए @hofnarwillie, मुझे लगता है कि आपको ग्राहक पक्ष JS का उपयोग करना चाहिए।
smwikipedia 13

1
@smwikipedia धन्यवाद, लेकिन मुझे लगता है कि क्लाइंट साइड सत्यापन केवल उपयोगकर्ताओं को आसानी के लिए इस्तेमाल किया जाना चाहिए। वास्तविक सत्यापन सर्वर साइड किया जाना चाहिए। क्लाइंटसाइड सत्यापन आपके ऐप को उपयोगकर्ता के अनुकूल बनाता है, लेकिन सर्वर साइड सत्यापन सुरक्षा और वैधता सुनिश्चित करता है, क्योंकि क्लाइंट साइड सत्यापन आसानी से बंद हो सकता है।
होफनरविले

जवाबों:


31

मैंने इस तकनीक का उपयोग विशेष रूप से उस वेब एप्लिकेशन के लिए किया है, जिस पर हम काम कर रहे हैं। मेरे बैकएंड को Google ऐप इंजन पर जावा एसडीके का उपयोग करके होस्ट किया गया है, और मेरे फ्रंट में HTML, CSS और जावास्क्रिप्ट (jQuery के साथ) का उपयोग किया गया है।

प्रोजेक्ट सिर्फ अपने और वेब डिजाइनर के साथ एक छोटा है, और हम दोनों को लगता है कि इस पद्धति ने हमें बहुत तेजी से काम करने और बहुत जल्द बाजार में कुछ हासिल करने में मदद की है।

लाभ: वेब डिजाइनरों के साथ काम करना

इस तकनीक का प्रमुख लाभ यह है कि वेब डिज़ाइनर, जो कुछ PHP जानता है, लेकिन खुद को प्रोग्रामर नहीं मानता है, वह HTML और CSS में बिना लिंक किए JSP, टैगलिब टैग और अन्य सर्वर-साइड की अनगिनत लाइनों के माध्यम से काम कर सकता है। मार्कअप जो हमें वर्षों से बताया जाता है, वह फ्रंट-एंड डेवलपर के जीवन को बहुत आसान बनाने वाला है।

सर्वर-साइड मार्कअप के बिना, हम अधिक चुस्त हो गए हैं। वेब डिज़ाइनर ने अपने मूल डिज़ाइन को 3 या 4 बार सीधे स्वैप किया है और मेरी ओर से बहुत कम बदलाव किए हैं।

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

सर्वर-साइड कोड और HTML / सीएसएस हैंडऑफ़

पिछले प्रोजेक्ट्स में, उसे जावा डेवलपर्स के लिए HTML और CSS को हैंडऑफ करना था, जो तब अपने HTML और CSS लेगा और JSP तकनीक का उपयोग करके इसे पूरी तरह से फिर से लिखेगा। इसमें बहुत समय लगेगा, और आमतौर पर पृष्ठों के वास्तविक प्रतिपादन में सूक्ष्म रूप से महत्वपूर्ण अंतरों के साथ-साथ W3C सत्यापनकर्ता में मान्य होगा।

कुल मिलाकर, हम दोनों इस तकनीक से काफी खुश हैं, और मेरे HTML पृष्ठों में अभी भी शून्य JSP पृष्ठ या सर्वर-साइड कोड है।

कीट / JSON तकनीक के नुकसान

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

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

लाभ: अन्य अनुप्रयोगों को प्लेटफॉर्म पर बनाया जा सकता है

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

हमारे ऑपरेशन में से एक लोग एक अन्य एप्लिकेशन में अवधारणा के प्रमाण का प्रयास करना चाहते थे, और मेरी प्रतिष्ठित सेवाओं के लिए धन्यवाद, हम पूरी तरह से अलग समस्या को हल करने के लिए आवेदन के लिए एक पूरी तरह से अलग दृश्य बनाने में सक्षम थे। अवधारणा का तेजी से विकसित किया गया प्रमाण इसका उपयोग स्वयं के HTML, CSS और JavaScript के लिए करता है, लेकिन इसने बैकएंड और डेटासोर्स के रूप में RESTful सेवाओं का उपयोग किया।

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

मैं इस बात पर जोर नहीं दे सकता कि यह आर्किटेक्चर कितना पुन: प्रयोज्य है, दोनों आवेदन स्तर के साथ-साथ HTML / CSS / जावास्क्रिप्ट स्तर पर, और मैं निश्चित रूप से आपको अपनी अगली परियोजना में यह प्रयास करने के लिए प्रोत्साहित करूंगा।


2
धन्यवाद। यह मेरे सवाल का पूरी तरह से जवाब देता है। स्पष्ट और संक्षिप्त उत्तर देने में आपके द्वारा लिए गए समय की सराहना करें। +1
होफनरविले

2
मैं एक ऐसी कंपनी में काम करता हूं, जहां पूरे आंतरिक वेब एप्लिकेशन html / js हैं, जो बैकएंड सेवाओं के साथ हैं, जो json एन्कोडेड डेटा परोसता है। यह वास्तव में अच्छी तरह से काम करता है और इस मॉडल का उपयोग करके नए ऐप बनाने के लिए बहुत तेज़ है, और क्योंकि बैकएंड और फ्रंट डेवलपर्स इसमें काम करते हैं समानांतर। आपको वास्तव में यह कोशिश करनी चाहिए।
नोह्रोस

@ jmort253 उत्कृष्ट उत्तर के लिए बहुत धन्यवाद। मैं बिल्कुल उसी वास्तुकला के बारे में सोच रहा था और आपका अभ्यास मुझे इसके साथ जाने के लिए आश्वस्त करता है। मैंने यहाँ ऐसे ही सवाल पूछे हैं: stackoverflow.com/questions/33934101/… और यहाँ: stackoverflow.com/questions/34020543/…
smwikipedia

12

यह निश्चित रूप से एक व्यवहार्य रणनीति है, लेकिन यह एक चांदी की गोली नहीं है।

पेशेवरों :

  • यदि सही किया जाता है, तो इस तरह से विकसित किए गए एप्लिकेशन बहुत ही संवेदनशील होते हैं
  • आपके पास तर्क का स्पष्ट अलगाव है (सर्वर पर) और प्रस्तुति (क्लाइंट पर); सर्वर को एप्लिकेशन के प्रस्तुतिकरण पहलुओं के साथ बिल्कुल भी चिंता करने की आवश्यकता नहीं है
  • नेटवर्क बैंडविड्थ के संभावित रूप से अधिक कुशल उपयोग (आप केवल कच्चे डेटा भेज रहे हैं, कोई प्रस्तुतकर्ता बॉयलरप्लेट नहीं)
  • डेस्कटॉप जैसे GUIs को विकसित करना आसान है, क्योंकि आप अनुरोध / प्रतिक्रिया प्रतिमान पर कम निर्भर हैं

विपक्ष :

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

2
धन्यवाद। क्या आप इस मॉडल के कारण होने वाले समसामयिक मुद्दों का उदाहरण दे सकते हैं?
होफनरविले

3
उदाहरण: यदि उपयोगकर्ता Vote Up पर क्लिक करता है और फिर Vote Up सर्वर कॉल समाप्त होने से पहले Vote Down पर क्लिक करता है, तो कितने वोट हैं?
JBRWilkinson

@JBRWilkinson बूलियन ध्वज जो स्थिति या मध्यांतर या अंतराल की जाँच करता है?
एल्पर तुरान

1

यह निश्चित रूप से संभव है, और शायद सबसे अच्छा अभ्यास के रूप में प्रोत्साहित करने योग्य है। आप जो प्रस्ताव कर रहे हैं वह व्यवसाय तर्क से UI को विभाजित कर रहा है ताकि चिंताओं का एक अलग पृथक्करण हो। यह सचमुच अच्छा है।

बहुत बार जिन रूपरेखाओं पर हमने एक साथ काम करने की कोशिश की है और आप एक अखंड सॉफ्टवेयर के साथ समाप्त होते हैं जहां यूआई, व्यावसायिक तर्क और डेटा सभी एक दूसरे के साथ जुड़े होते हैं। जिससे इसे बनाए रखना और संशोधित करना अधिक कठिन हो जाता है।

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

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


1

एक नकारात्मक पहलू यह है कि जावास्क्रिप्ट और ASP.net में कुछ तर्क की नकल करने की आवश्यकता है। यह आपके आवेदन के आधार पर आपके लिए एक बड़ा मुद्दा नहीं हो सकता है। यह अक्सर सामने आता है क्योंकि आप सर्वर को हर छोटी चीज़ की जांच करने के लिए पूछना नहीं चाहते हैं ("क्या उपयोगकर्ता को इस बटन को दबाने या इस स्थिति में इस विकल्प का चयन करने की अनुमति है?") लेकिन आप भी आकलन नहीं करना चाहते हैं? उपयोगकर्ता के ग्राहक के नियंत्रण के बाद से क्लाइंट केवल एक ही सत्यापन कर रहा है।


0

यदि आप अभी भी ASP.NET WebForms का उपयोग कर रहे हैं और अपने अनुप्रयोगों को गति देना चाहते हैं, तो यहां आपको क्या करना चाहिए:

  • अपने आवेदन को सोलिड को ध्यान में रखकर डिजाइन करें
  • ViewStateसभी पृष्ठों और उपयोगकर्ता नियंत्रणों पर अक्षम करें
  • सर्वर साइड कंट्रोल का उपयोग न करें

    <%: VeiwModel.Title%> के बजाय <asp: लिटरल आईडी = "शीर्षक" रनैट = "सर्वर">

  • बैकएंड में, ऑनइनिट विधि को ओवरराइड करें और वहां सभी इनिशियलाइज़ेशन करें:

    संरक्षित ओवरराइड शून्य OnInit (System.EventArgs e) {CreateViewModel (); (ई) base.OnInit; }

  • SquishIt का उपयोग करके सभी .css और .js फ़ाइलों को 1 में संपीड़ित करें

  • आलसी लोड छवियों
  • कैश जटिल वस्तुओं

अंत में, www.porsche.se देखें। यह एक बहुत तेज़ वेबसाइट नहीं है?


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