क्या जावास्क्रिप्ट में UI 100% करना और एपीआई के माध्यम से डेटा प्रदान करना एक अच्छा विचार है?


19

मेरी प्राथमिक दिन की नौकरी HTML अनुप्रयोग बना रही है। इसके साथ मेरा मतलब है कि बहुत सारे संपादन योग्य ग्रिड साक्षात्कार, टेक्स्टबॉक्स, ड्रॉपडाउन आदि के साथ सीआरयूडी-प्रकार के अनुप्रयोगों का उपयोग किया जाता है, हम वर्तमान में ASP.NET वेबफॉर्म का उपयोग कर रहे हैं, जो काम पूरा करते हैं, लेकिन प्रदर्शन ज्यादातर निराशाजनक है, और अक्सर आप आप की जरूरत है पाने के लिए हुप्स के माध्यम से कूदने के लिए है। हुप्स जो छत से लटकाए जाते हैं और aflame सेट करते हैं।

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

समस्या यह है कि मैंने ऐसा पहले कभी नहीं किया है, और मैंने कभी किसी को ऐसा करते नहीं देखा, इसलिए मुझे नहीं पता कि समस्याएं क्या होंगी। विशेष रूप से, मैं इससे चिंतित हूं:

  • अभी भी प्रदर्शन । बेंचमार्किंग से पता चलता है कि वर्तमान में मुख्य देरी क्लाइंट की तरफ है, जब ब्राउज़र AJAX अपडेट के बाद अधिकांश पेज को फिर से प्रस्तुत करने की कोशिश करता है। ASP.NET वेबफॉर्म जनरेट किया गया मार्कअप शब्द "वेब" को एक नया अर्थ देता है, और समृद्ध डेवेक्सप्रेस नियंत्रण उस के ऊपर जावास्क्रिप्ट जटिलता की अपनी परत जोड़ते हैं। लेकिन क्या जावास्क्रिप्ट पक्ष पर सभी आवश्यक परिवर्तनों को पुनर्गणना करना तेजी से होगा और फिर केवल उसी को अपडेट करना होगा जिसे अपडेट करने की आवश्यकता है? ध्यान दें कि मैं उन रूपों के बारे में बात कर रहा हूं जिनमें कई संपादन योग्य ग्रिड साक्षात्कार, बहुत सारे टेक्स्टबॉक्स, कई ड्रॉपडाउन हैं जिनमें से प्रत्येक में आधा-एक-अरब फ़िल्टर करने योग्य आइटम हैं, आदि।
  • विकास में आसानी । अब बहुत अधिक जावास्क्रिप्ट होगा, और यह संभवतः पृष्ठ के HTML मार्कअप के साथ मिश्रित होगा। उस या किसी प्रकार के नए दृश्य इंजन का उत्पादन करना होगा। जावास्क्रिप्ट के लिए Intellisense भी C # कोड की तुलना में बहुत खराब है, और जावास्क्रिप्ट की गतिशील प्रकृति के कारण इसे बहुत बेहतर होने की उम्मीद नहीं की जा सकती है। कोडिंग प्रथाएं इसे थोड़ा सुधार सकती हैं, लेकिन बहुत अधिक नहीं। इसके अलावा, हमारे अधिकांश डेवलपर्स मुख्य रूप से सी # डेवलपर्स हैं, इसलिए कुछ सीखने की अवस्था और शुरुआती गलतियां होंगी।
  • सुरक्षा । बहुत सारी सुरक्षा जांच दो बार (सर्वर-साइड और यूआई-साइड) करनी होगी, और डेटा-प्रोसेसिंग सर्वर साइड को उनमें से कई को शामिल करना होगा। वर्तमान में, यदि आप टेक्स्ट-बॉक्स को केवल सर्वर साइड पर पढ़ने के लिए सेट करते हैं, तो आप क्लाइंट राउंडट्रिप के माध्यम से इसके मूल्य में बदलाव नहीं कर सकते हैं। यह सुनिश्चित करने के लिए फ्रेमवर्क में पहले से ही पर्याप्त कोड है (व्यूस्टेट एन्क्रिप्शन के माध्यम से)। डेटा-केवल दृष्टिकोण के साथ, यह कठिन हो जाता है, क्योंकि आपको मैन्युअल रूप से सब कुछ जांचना होगा। दूसरी ओर, शायद सुरक्षा छेद को स्पॉट करना आसान होगा, क्योंकि आपके पास चिंता करने के लिए केवल डेटा होगा।

सब के सब, यह हमारी समस्याओं को हल करेगा, या उन्हें बदतर बना देगा? क्या किसी ने कभी यह प्रयास किया है, और परिणाम क्या थे? क्या इस तरह के प्रयास (jQuery और नैतिक समकक्ष एक तरफ) में मदद करने वाले कोई रूपरेखा हैं?


So on the server side we would still have a basic layout simliar to our current ASPX markup, but that then would get sent to the client only once, and the Javascript part would take care of all the subsequent UI updates.आप बिल्कुल वही बता रहे हैं जो ASP.NET है, जो मुझे बताता है कि आप संभवतः इसका सही उपयोग नहीं कर रहे हैं। :) अपने ASP.NET अनुप्रयोगों में यदि आप घटकों को अपडेट पैनल में रखते हैं तो ASP.NET जावास्क्रिप्ट लाइब्रेरी सर्वर साइड पर अतुल्यकालिक पोस्टबैक करेगा और आपके द्वारा निर्दिष्ट घटकों को फिर से प्रस्तुत करेगा।
maple_shaft

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

3
हर बार मुझे एक ASP.NET ऐप दिखाई देता है, जहाँ कोई व्यक्ति अपडेट पैनल के भीतर पृष्ठ पर सब कुछ डालता है, मुझे लगता है कि मैं दीवार पर अपना मॉनिटर फेंक रहा हूं>! <। यह ASP.NET के पूरे उद्देश्य को बहुत हरा देता है। सर्वर साइड जीवनचक्र और एप्लिकेशन ईवेंट को बनाए रखने के लिए इसके लिए पृष्ठ के संपूर्ण ViewState के साथ आगे और पीछे संचार करना आवश्यक है। यदि आपके पास 200 नियंत्रण और एक डेटा ग्रिड है, तो यह भविष्यवाणी करने के लिए जोएल स्पोलस्की नहीं लेगा कि आपको बड़े पैमाने पर प्रदर्शन की समस्या होगी। एड वुडकॉक और अम्मो ने सब कुछ पूरी तरह से समेट दिया है इसलिए मुझे आपको अतिरिक्त जवाब देने की कोई आवश्यकता नहीं है।
maple_shaft

1
@maple_shaft - क्षमा करें, लेकिन मैंने वास्तव में इस सामान को प्रोफाइल किया है। यह स्थानीय डेवलपर कंप्यूटर पर भी धीमा था, और फ़िडलर ने स्पष्ट रूप से दिखाया कि HTTP कनेक्शन कम से कम एक सेकंड के लिए खोला गया था, जबकि पृष्ठ केवल कई सेकंड बाद दिखाई दिया था, और सभी जबकि ब्राउज़र उतना ही सीपीयू का उपयोग कर रहा था। मिलता है और मूल रूप से जमे हुए था। यह ब्लॉटेड व्यूस्टेट नहीं है, यह ब्लॉटेड HTML / जावास्क्रिप्ट है।
विल्क्स-

1
@ विलक्स- सी # /। नेट के साथ कुछ भी गलत नहीं है (केवल विंडोज़ / लागत के अलावा)। ब्लोट के साथ बड़ी समस्याएं हैं जो ASP.NET WebForms चौखटे इसके ऊपर रखती हैं। जैसा कि उल्लेख किया गया है नैन्सी को पसंद करें यदि आप .NET को पसंद करते हैं। लेकिन यह पूरी तरह से विषय से बाहर है, यह सिर्फ एक टिप्पणी थी कि अगर आप
वेबफॉर्म

जवाबों:


10

लिंक्डइन अपने मोबाइल साइट के लिए ऐसा करते हैं (देखें http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile पार्ट 4), और यह स्पष्ट रूप से उनके लिए बहुत फायदेमंद है प्रदर्शन के दृष्टिकोण।

हालाँकि, मेरा सुझाव है कि आप विभिन्न कारणों से ऐसा ही करने से बचें।

पहली स्थिरता है: C # / ASP.net, यह सर्वर-साइड फ्रेमवर्क, क्लाइंट-इंडिपेंडेंट होने के कारण है, जबकि जावास्क्रिप्ट नहीं है (यहां तक ​​कि jQuery जैसे ढांचे के साथ आप 100% क्रॉस-ब्राउज़र संगतता प्राप्त नहीं करने जा रहे हैं नहीं, भविष्य-प्रूफिंग)। मैं कहता हूं कि डायनामिक टाइप की तुलना में स्टेटिक-टाइप किए गए एप्लिकेशन की कार्यक्षमता को सत्यापित करना और भी आसान है, जो कि आप बड़े पैमाने पर साइटों का निर्माण कर रहे हैं।

दूसरा यह है कि आप अपने संपूर्ण वेबसाइट को चलाने के लिए आवश्यक जटिलता के शुद्ध-जावास्क्रिप्ट अनुप्रयोग का निर्माण करने में सक्षम (और इच्छुक) अन्य लोगों को ढूंढने में कठिनाई महसूस कर रहे हैं, जो आपको खोजने में सापेक्ष सहजता की तुलना में हैं। नेट प्रोग्रामर)। यह सीधे तौर पर आपकी चिंता का विषय नहीं हो सकता है, लेकिन यह निश्चित रूप से दीर्घकालिक दृष्टिकोण से सोचने के लिए कुछ है।

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

आपकी बुलेटेड चिंताओं के लिए:

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

  • विकास में आसानी वास्तव में एक चिंता का विषय नहीं है, मेरी राय में, जेएस विकास के लिए बहुत अच्छे उपकरण उपलब्ध हैं, केवल विजुअलस्टडियो में खुद को बॉक्स न करें क्योंकि आप इसके लिए उपयोग किए जाते हैं! (उदाहरण के लिए JetBrains WebStorm का प्रयास करें)।

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

मैं क्या करूँगा, अगर मैं तुम थे, वास्तव में इस स्विच के पीछे के कारणों की जांच कर रहा हूं; यह अच्छी तरह से हो सकता है कि आप प्रभावी रूप से .NET का लाभ नहीं उठा रहे हैं और अपने गेम को बढ़ाने की आवश्यकता है, WebForms विशेष रूप से धीमी गति से आउट-ऑफ-द-बॉक्स नहीं है, इसलिए शायद आपके द्वारा उपयोग किए जा रहे 3-पार्टी लाइब्रेरी में से कुछ अपने प्रतिपादन को धीमा कर रहे हैं।

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


नहीं, जैसा कि मैंने पहले ही डार्कनाइट्स के उत्तर पर टिप्पणी की है, यह एक आंतरिक ऐप है, जिसमें कोई भी (अच्छी तरह से, थोड़ा) सार्वजनिक-सामना करने वाला भाग नहीं है, इसलिए जावास्क्रिप्ट-निर्भरता ठीक है। और मैंने प्रोफाइलिंग की है। सर्वर साइड अच्छा है। यह क्लाइंट का पक्ष है जो भारी जेनरेट किए गए HTML के तहत नीचे चला जाता है (जैसा कि मैंने कहा, ASP.NET का जेनरेट मार्कअप निराशाजनक है) और डेवेक्सप्रेस जावास्क्रिप्ट।
विल्क्स-

1
@EdWoodcock ASP.NET वेब साइटें अपने स्वभाव से संचालित जावास्क्रिप्ट द्वारा होती हैं। यह है कि यह ViewState और पृष्ठ तत्व प्रतिपादन के अतुल्यकालिक संचार को कैसे संभालता है।
maple_shaft

@ विलक्स- यह एक झटके के रूप में आ सकता है, लेकिन डेटा ग्रिड जैसे नियंत्रण बहुत जटिल हैं। शायद आपके पास एक ही पृष्ठ पर बहुत सारे तत्व हैं?
maple_shaft

@ विलक्स- शायद यह आपके नियंत्रण उपयोग को देखने का समय है, अगर वे पागल मार्कअप उत्पन्न कर रहे हैं (डिफ़ॉल्ट एस्पेक्ट नियंत्रण ज्यादातर मामलों में नहीं हैं यदि आप डेटाग्रिड्स के बजाय रिपीटर जैसी चीजों का उपयोग कर रहे हैं) तो शायद आपको अपने स्वयं के नियंत्रणों को रोल करना चाहिए (या इसके बजाय UserControls में हाथ से लिखे गए HTML पर जाना चाहिए)।
एड जेम्स

1
@maple_shaft - या, अधिक विशेष रूप से फ्लेक्स, जो (जैसा कि मैं इसे समझता हूं) बिल्कुल ऐसे उद्देश्यों के लिए फ्लैश के शीर्ष पर बनाया गया है। यह एक और विचार है जो मैं कुछ समय के लिए कर रहा हूं। लेकिन ... जितना मैंने दूसरों से इसका उल्लेख करने की कोशिश की है, मुझे केवल नकारात्मक प्रतिक्रिया मिली है, इसलिए मैं इसके माध्यम से खींचने की कल्पना नहीं कर सकता। यह भी हम सभी को कुछ नया सीखने की आवश्यकता होगी।
विल्क्स-

8

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


1
मैं जावास्क्रिप्ट के साथ बहुत सहज हूं। मुझे पता है कि कुछ अन्य लोग हालांकि नहीं हैं।
विल्क्स-

2
मैंने ऐसा कई सालों तक पिछली नौकरी में किया था। ExtJS बहुत अच्छा है और आप इसके साथ एक बड़ी राशि कर सकते हैं।
ज़ाचरी के

@ZacharyK - यह वास्तव में जटिल रूपों पर कैसा प्रदर्शन करता है? जैसे मैंने वहाँ लिखा था, कई ग्रिडव्यू, टैबपैनल, आदि के साथ?
विल्क्स-

2
काफी अच्छी तरह से। आपको अपने डेटा मॉडल के बारे में सोचने की ज़रूरत है। ईमानदार होने के लिए मैं विशाल रूपों से बचने की कोशिश करता हूं, और कई छोटे तत्वों की रचना करता हूं। लेकिन एक्सट्रा की सीमा के साथ ऐसा करने के लिए कम है तो अच्छा डिजाइन आदि
Zachary K

@ZacharyK - खुद को दोहराने के लिए बहुत आलसी। एड वुडकॉक के जवाब पर मेरी टिप्पणी पढ़ें। मैं इसे सरल नहीं बना सकता। :(
विल्क्स-

8

जिस टीम को मैंने 2008 के अंत में एक्सटीजेएस में स्थानांतरित करने का फैसला किया है। हमारे पास उस बिंदु पर 200.000 लाइन PHP ऐप था जो फ्रंट-एंड मुद्दों से ग्रस्त था। हमारी स्थिति आपकी तुलना में बहुत खराब थी, क्योंकि हमारे पास एक नियंत्रित रूप नियंत्रण ढांचा था जो वास्तव में खराब था, और हमारे पास पेज के अनुभागों को लोड करने के लिए iframes का भारी उपयोग था (दृश्य वास्तुकला 2005 तक वापस आ गई, और टीम को पता नहीं था की अजाक्स कि जल्दी)। हमें वैसे भी कोड को रिफ्लेक्टर करना था, इसलिए इससे कोडबेस को मुख्य रूप से क्लाइंट-साइड करने के लिए भारी खोज करने का निर्णय लेना आसान हो गया।

आज एप्लिकेशन 300.000 लाइनें हैं, जिनमें से 60.000 लाइनें एक्जस्ट कोड हैं, और कार्यक्षमता का लगभग 3 / 4th एक्सटीजेएस में माइग्रेट किया गया है। Extjs कोड सभी एक-पृष्ठ ऐप है, लेकिन यह अभी भी iframes के अंदर कुछ विरासत रूपों को एम्बेड करता है। हमने पहले नेविगेशन कंटेनर पर पोर्ट किया, और फिर अलग-अलग फीचर क्षेत्रों के टुकड़े को माइग्रेट किया। इस दृष्टिकोण के साथ, हम नियमित रूप से फीचर देव प्रक्रिया में एक्जेज माइग्रेशन को खिसकाने में कामयाब रहे, बिना हमें धीमा किए।

  • प्रदर्शन

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

  • विकास में आसानी

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

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

  • सुरक्षा

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


काश मैं आपके वास्तविक अनुभव के कारण केवल +1 से अधिक कर पाता!
विल्क्स-

4

यदि आप स्क्रिप्ट रहित उपयोगकर्ताओं का समर्थन नहीं कर सकते हैं, और खोज इंजन आपको चिंता नहीं करते हैं, तो हाँ, यह पूरी तरह से व्यवहार्य दृष्टिकोण है। यहाँ पेशेवरों और विपक्ष का एक छोटा सा हिस्सा है:

पेशेवरों:

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

विपक्ष:

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

व्यक्तिगत रूप से, मुझे लगता है कि यदि आप इस मार्ग पर जाते हैं, तो ASP.NET UpdatePanels सही तरीका नहीं है। वे आंशिक रूप से मौजूदा वेब अनुप्रयोगों को अंजाम देने के लिए बहुत अच्छे हैं, लेकिन वे अभी भी AJAX के ऊपर HTML भेजते हैं, और इस तरह से राज्य का प्रबंधन करना बहुत बालों वाला हो सकता है। आप बेहतर तरीके से सभी तरह से चलते हैं, बस एक स्थिर HTML दस्तावेज़ परोसते हैं, और फिर HTML प्रतिपादन करने के लिए एक जावास्क्रिप्ट टेम्पलेट लाइब्रेरी का उपयोग करते हैं; सर्वर किसी भी गतिशील HTML की सेवा नहीं करता है, इसके बजाय, क्लाइंट सर्वर में व्यापार-तर्क स्तर कॉल करता है और कच्चे डेटा प्राप्त करता है।


1

हाँ आप कर सकते हैं लेकिन ..

आपको यह सुनिश्चित करने की आवश्यकता है कि आपके पास सुशोभित "गिरावट" है ताकि आपके एप्लिकेशन के महत्वपूर्ण हिस्से अभी भी जावास्क्रिप्ट के बिना काम करेंगे।

यह है कि मैं सबसे अधिक एप्लिकेशन "HIJAX" शैली का निर्माण करता हूं।


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

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

3
@ यदि आप एक प्रोग्रामर की तरह सोच रहे हैं तो उपयोगकर्ता नहीं हैं, हम चीजों की भव्य योजना में एक छोटे से अल्पसंख्यक के लिए खाते हैं। चलिए इसे "js या js to js" में नहीं बदलते हैं? क्योंकि इसकी मृत्यु इन हिस्सों के आसपास हुई थी :)
डार्क नाइट

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

1
Maple_shaft मुझे आप पसंद हैं, इसलिए मैं इसे अच्छी तरह से कहूंगा, चलो उस रास्ते पर नहीं चलते हैं :) धन्यवाद!
अंधेरी

1

मेरी साइट अभी भी अपनी प्रारंभिक अवस्था में है लेकिन अभी तक मेरे लिए 100% j ui ठीक है। एकमात्र सर्वर लॉजिक जो कि फ्रंट एंड पर मौजूद है, मॉडल मैपिंग और अजाक्स यूआरएल है। सर्वर को ui के बारे में कोई जानकारी नहीं है, जो मुझे बनाए रखना बहुत आसान है। यदि आप रुचि रखते हैं, तो आप मेरी साइट की जांच कर सकते हैं जो एक्सटीजेएस http://coffeedig.com/cfish/ में लिखी गई है । मेरी साइट में वास्तव में कोई सुरक्षा समस्या नहीं है, लेकिन क्लाइंट साधारण सत्यापन द्वारा सामान्य उपयोगकर्ता की मदद करता है। मुझे पता है कि एक दुर्भावनापूर्ण उपयोगकर्ता वास्तव में किसी भी अजाक्स को सर्वर पर भेज सकता है इसलिए सर्वर पर "सुरक्षा" तर्क के सभी किया जाता है।

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

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