देव जटिल जावास्क्रिप्ट यूआई के लिए बंद है [बंद]


19

मैं जटिल क्लाइंट-साइड जावास्क्रिप्ट के विकास के आसपास, विभिन्न दृष्टिकोणों और सर्वोत्तम प्रथाओं के परिदृश्य को समझने की कोशिश कर रहा हूं।

मुझे यकीन नहीं है कि आवेदन के इस वर्ग को लेबल करने के लिए, शायद भारी AJAX या RIA (लेकिन फ्लैश / सिल्वरलाइट जैसे प्लगइन्स नहीं)। मैं इन विशेषताओं के साथ वेब ऐप्स की बात कर रहा हूं:

  • जावास्क्रिप्ट में समृद्ध / देशी डेस्कटॉप UX का अनुकरण करें
  • सर्वर-साइड JS में अधिकांश / सभी व्यवहार को डेटा-API (JSON / Html-Templates) के रूप में सर्वर का उपयोग करना शामिल है।

यह UI-रेंडरिंग के लिए वेब-सर्वर का उपयोग करने के विपरीत है, पेज-रिफ्रेश मॉडल में सभी HTML का उत्पादन करता है।

कुछ उदाहरण निम्न हैं:

  • Google डॉक्स / जीमेल
  • MindMeister
  • निर्णायक ट्रैकर

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

प्रश्न: इस प्रकार के भारी जेएस विकास को प्रबंधित करने के लिए आम दृष्टिकोण क्या हैं?

क्लाइंट-साइड कोड, जैसा कि एक ऐप सुविधाओं में बढ़ता है, मजबूती से जटिल है। कच्चे JS (या तो मैं सुनता हूं, और अच्छी तरह से यह विश्वास कर सकता हूं) के साथ कई टीमों के विकास के प्रयासों को बढ़ाने में समस्याएं हैं।

Google ने GWT के निर्माण में समस्या का सामना किया है जो उच्च स्तर की भाषा (जावा) से लेकर JS तक संकलित है, मौजूदा विकास के बुनियादी ढाँचे पर झुकाव है जिसमें उच्च स्तरीय भाषा है (ग्रहण, मजबूत-टाइपिंग, रीफ़ैक्टरिंग उपकरण), साथ ही साथ ब्राउज़र संगतता और डेवलपर से दूर अन्य मुद्दे।

अन्य उपकरण हैं, जैसे स्क्रिप्ट # के लिए C # जो कुछ ऐसा ही करते हैं। यह सब जेएल को एक आईएल (इंटरमीडिएट भाषा) की भूमिका में डालता है। अर्थात। "आप वास्तव में कभी भी उस 'निम्न स्तर की भाषा' में नहीं लिखते हैं।"

लेकिन यह 'जेएस का संकलन' एकमात्र दृष्टिकोण नहीं है। यह स्पष्ट नहीं है कि GWT प्रमुख दृष्टिकोण है ... या वास्तव में यह बन जाएगा।

अमीर-ग्राहक जावास्क्रिप्ट के साथ लोग क्या कर रहे हैं? कुछ उन्मुख प्रश्न:

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

तो, हमारे इस भारी-जावास्क्रिप्ट और एचटीएमएल 5 भविष्य में उभरते रुझान क्या हैं?

धन्यवाद!


ज़िचरा डेस्कटॉप वातावरण का अनुकरण करने के लिए क्लाइंट साइड जेएस पर बहुत अधिक निर्भर करती है।
मेंढक

धन्यवाद। क्या आप जानते हैं कि वे अपना JS कैसे विकसित करते हैं? हाथ गढ़ी, या उच्च स्तरीय टूलींग?
फिल कॉकफील्ड

इसी तरह के सवाल का जवाब बहुत अच्छी तरह से विकल्पों को संक्षेप में प्रस्तुत करता है: stackoverflow.com/questions/218699/…
विक्टर सोरोकिन

1
Google+ GWT का एक भारी उपयोग है, जो मुझे विश्वास है (जो कि अपेक्षित है ... जैसा कि यह Google से देख रहा है)
जमैबेरो

बहुत बुरा यह सवाल बंद कर दिया गया था :( ... IMHO इसे फिर से खोल दिया जाना चाहिए
dagnelies

जवाबों:


6

इस दिशा में आगे बढ़ने वाले अधिकांश वेब ऐप्स (और जिन वेब देवों से मैंने बात की है) जो jQuery का उपयोग अपने आधार के रूप में कर रहे हैं।

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

एकदम मेरे विचार…


मुझे संदेह है कि कोई भी फ़्रेमवर्क जावास्क्रिप्ट की "नाजुकता" को बाहर निकाल सकता है। यह गतिशील प्रकृति है जिससे स्थिरता सुनिश्चित करना और रनटाइम त्रुटियों के लिए प्रवण होना बहुत मुश्किल हो जाता है। यह माना जाता है कि एक जैसन विशेषता का नाम बदल दिया गया था और चीजों को तोड़ने के लिए नीचे पूरे तरीके से नहीं लिखा गया था। ... यह विशिष्ट छोटी लिपियों के साथ समस्या नहीं है, लेकिन हजारों LOC के साथ जटिल आरआईए में, यह जल्दी से हो सकता है, और जल्दी से किसी का ध्यान नहीं जा सकता है। कोई भी ढांचा इससे बचने में सक्षम नहीं है।
15

5

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

Google GWT को एक सभ्य सर्वर-साइड एकीकरण के साथ एक बहुत तेज़ एक्स-प्लेटफ़ॉर्म निष्पादन वातावरण के रूप में बेचने की कोशिश करता है। लेकिन जैसा कि अन्य ने पहले ही बताया था कि अब ऐसा नहीं है - JQuery और YUI जितनी तेजी से नहीं तो उतने ही तेज हैं। और जब आप मैन्युअल रूप से इकट्ठे हो जाते हैं तो आपके पेजों को प्रोफाइल और ऑप्टिमाइज़ करना बहुत आसान हो जाता है, ताकि आपके पास CSS, मार्कअप और जावास्क्रिप्ट पर पूर्ण नियंत्रण हो।

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

हमारे वर्तमान प्रोजेक्ट में हम स्ट्राइप्स का उपयोग करते हैं - एक निम्न-स्तरीय एक्शन-बेस्ड फ्रेमवर्क, - और क्लाइंट साइड पर JQuery। एक बार जब आप स्पष्ट रूप से एक पहेली के सभी टुकड़ों को देखते हैं तो अजाक्स करना बहुत आसान है: यहां आपका सर्वर-साइड कोड है जो डेटा पर संचालित होता है। यहां आपका क्लाइंट-साइड कोड - डेटा पुनर्प्राप्ति के लिए और चीजों को पृष्ठों पर बनाने के लिए है। यहाँ आपका CSS है, यहाँ आपका markup है, यहाँ आपका templating है - सब कुछ साफ और decoupled है। आसानी से एक्स्टेंसिबल, हैक करने योग्य, ट्यूनेबल और डीबग करने योग्य। मुझे यह पसंद है।

मुझे JQuery से प्यार है क्योंकि यह गति और सरलता के प्रति दृष्टिकोण रखता है। मैं मॉड्यूलर और व्यापक विजेट के लिए YUI3 से प्यार करता हूं। मुझे ब्राउज़रों में निरंतरता देने के लिए YUI CSS पसंद है। मुझे अच्छे हिस्सों के लिए जावास्क्रिप्ट बहुत पसंद है। मुझे नौकरी पाने के लिए जावा से प्यार है।

बस चुम्बन, और आप ठीक हो जाओगे!


2
और BTW, Google GMW के लिए GWT का उपयोग नहीं करता है - वे अपने बंद पुस्तकालय का उपयोग करते हैं।
एंड्रयू Андрей Листочкин

1
वास्तव में GWT के आसपास के जोखिमों के इस विश्लेषण की सराहना करते हैं, और सामान्य रूप से उच्च स्तर की भाषाओं से संकलन करते हैं।
फिल कॉकफील्ड

2
मुझे लगता है कि मैं एंड्रयू से सहमत हूं। यदि आप जावास्क्रिप्ट को समझते हैं तो आपको उच्च स्तर के ढांचे की आवश्यकता नहीं है। उदाहरण के लिए ASP.NET WebForms एक ऐसा ढाँचा है जो XML और कस्टम टैग्स का उपयोग करता है, जो कि वेब के साथ कम अनुभव वाले विंडोज के साथ अधिक अनुभव वाले किसी व्यक्ति के लिए अधिक सरल प्रोग्रामिंग प्रतिमान के लिए जादूगरों और पॉपअप जैसी चीजों का निर्माण करता है। एक प्रतिमान रखने की कोशिश करना। लेकिन ASP.NET MVC लोकप्रिय और मानक IMO बन रहा है, क्योंकि यह वेब के करीब है - यह प्रतिमान वास्तविकता को फिट करता है।
जेमीबारो

3

मैंने इन्हें "सिंगल-पेज एप्लिकेशन" कहा है।

यह एक नया वातावरण है, और नियम अभी तक पूरी तरह से लिखे नहीं गए हैं। मैंने पिछले साल (2010) में अपेक्षाकृत प्रमुख सिंगल-पेज एप्लिकेशन पर काम किया था, और ये हमारे द्वारा उपयोग किए जाने वाले उपकरण हैं।

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

फ्रंट-एंड कोड जावास्क्रिप्ट था। हमने पृष्ठ तत्वों में हेरफेर करने के लिए jQuery का उपयोग किया , टेंपलेटिंग के लिए शुद्ध , और कोड में मॉड्यूल को तोड़ने के लिए EssentialJs । (अधिक सटीक डाउनलोड प्रदान करने के लिए आवश्यक उपकरण का उपयोग किया गया था।)

हमने qUnit का उपयोग करके अपने परीक्षण लिखे , और एक jUnit परीक्षण किया, जिसमें प्रत्येक qUnit परीक्षण को चलाने के लिए htmlunit का उपयोग किया , फिर परिणामों के लिए आउटपुट परिमार्जन किया, और qUnit पास / असफल स्थिति के आधार पर उत्तीर्ण या असफल हुए। वे बैक एंड के लिए हमारे ज्यूनिट परीक्षणों में शामिल हो गए, और हडसन / जेनकिंस का उपयोग करके हमारे सीआई में लुढ़क गए ।


2

मैं ऐसे ऐप पर काम करता हूं, जो एक्सट जेएस के शीर्ष पर बनाया गया है। एप्लिकेशन को मॉड्यूलर आयोजित किया जाता है। विभिन्न मॉड्यूल स्व-निहित घटकों के रूप में कार्यान्वित किए जाते हैं जो एक्सट्रीम घटक पदानुक्रम से हटाए जाने के बाद स्वयं को साफ करते हैं। ऑन-डिमांड लोडर ज़रूरत से पहले अतिरिक्त घटकों को लोड करते हैं (एक जेएस फ़ाइल = एक घटक)।

मैंने पाया है कि यह दृष्टिकोण पैमाना नहीं है। केवल वास्तविक सीमाएँ जो मैंने चलाई हैं, वे IE में एक ही समय में पेड़ में बहुत सारे DOM तत्वों के होने से संबंधित हैं। वहाँ समाधान रणनीतिक रूप से आवेदन के छिपे हुए हिस्सों को अनलोड करने के लिए है। क्योंकि सभी DOM हेरफेर चरम घटक पदानुक्रम के माध्यम से होता है, DOM लगभग पूरी तरह से अमूर्त होता है, और विकास सीधा रहता है।


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

0

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

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

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

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


यहाँ जावास्क्रिप्ट के साथ TDD के बारे में एक अच्छी पोस्ट है जो ब्याज की हो सकती है [ msdn.microsoft.com/en-us/scriptjunkie/ff452703 ]
jamiebarrow
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.