सबसे बड़ा GWT नुकसान? [बन्द है]


189

मैं एक प्रोजेक्ट के शुरुआत / मध्य में हूं जिसे हमने GWT का उपयोग करके कार्यान्वित करने के लिए चुना है। क्या किसी को GWT (और GWT-EXT) का उपयोग करने में कोई बड़ी गड़बड़ी का सामना करना पड़ा है जिसे दूर करने में असमर्थ थे? प्रदर्शन के नजरिए से कैसे?

कुछ चीजें जो हमने देखी / सुनी हैं उनमें पहले से ही शामिल हैं:

  • Google सामग्री को अनुक्रमित करने में सक्षम नहीं हो रहा है
  • सीएसएस और स्टाइल सामान्य रूप से थोड़ा परतदार लगता है

इन वस्तुओं पर किसी भी अतिरिक्त प्रतिक्रिया के लिए भी देख रहे हैं। धन्यवाद!


4
हाल ही में मैंने अपने Google खोज परिणामों में कुछ GWT- आधारित वेबसाइटों को सही ढंग से देखा है, हालांकि अंतर्निहित HTML में वह जानकारी शामिल नहीं है जो मैं खोज रहा हूं (उदाहरण के लिए .ianian.com के पास इन परिणामों के कई प्रकार हैं)। ऐसा प्रतीत होता है कि Google अनुक्रमणिका कुछ बुद्धिमान जावास्क्रिप्ट प्रतिपादन कर रही होगी ताकि यह पता लगाया जा सके कि सब कुछ लोड होने के बाद वास्तव में एक पृष्ठ पर क्या दिखाई देगा।
स्ट्रिपिंगवर्यर

जवाबों:


231

मैं यह कहकर शुरू करूंगा कि मैं एक विशाल GWT प्रशंसक हूं, लेकिन हां कई नुकसान भी हैं, लेकिन सबसे ज्यादा अगर हम दूर नहीं कर पाए तो:

समस्या: लंबा संकलन समय, जैसा कि आपकी परियोजना बढ़ती है, इसलिए इसे संकलित करने में जितना समय लगता है। मैंने 20 मिनट के संकलन की रिपोर्टें सुनी हैं, लेकिन मेरा औसत लगभग 1 मिनट है।

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

<set-property name="user.agent" value="gecko1_8" />

जहाँ gecko1_8 Firefox 2+ है, अर्थात IE IE है, आदि।


समस्या: होस्टेड मोड बहुत धीमा है (ओएस एक्स पर कम से कम) और जब आप जेएसपी या रेल्स पेज जैसी चीजों को संपादित करते हैं और अपने ब्राउज़र में रीफ्रेश हिट करते हैं तो आपको मिलने वाले 'लाइव' परिवर्तनों के मिलान के करीब नहीं आते हैं।

उपाय: आप होस्ट किए गए मोड को अधिक मेमोरी दे सकते हैं (मैं आम तौर पर 512M के लिए मिला था) लेकिन यह अभी भी धीमा है, मैंने पाया है एक बार जब आप GWT के साथ पर्याप्त हो जाते हैं तो आप इसका उपयोग करना बंद कर देते हैं। आप परिवर्तनों का एक बड़ा हिस्सा बनाते हैं, फिर सिर्फ एक ब्राउज़र (आमतौर पर 20 के लायक संकलन) के लिए संकलन करें और फिर अपने ब्राउज़र में ताज़ा हिट करें।

अद्यतन: GWT 2.0+ के साथ यह अब कोई समस्या नहीं है, क्योंकि आप नए 'विकास मोड' का उपयोग करते हैं। इसका मूल रूप से मतलब है कि आप अपनी पसंद के ब्राउज़र में सीधे कोड चला सकते हैं, इसलिए गति का कोई नुकसान नहीं है, साथ ही आप इसे फायरबग / निरीक्षण कर सकते हैं, आदि।

http://code.google.com/p/google-web-toolkit/wiki/UsingOOPHM


समस्या: GWT कोड जावा है, और HTML पेज को बिछाने के लिए एक अलग मानसिकता है, जो HTML डिज़ाइन को लेता है और इसे GWT में बदल देता है

समाधान: फिर से आपको इसकी आदत हो जाती है, लेकिन दुर्भाग्य से HTML डिज़ाइन को GWT डिज़ाइन में परिवर्तित करना हमेशा ऐसा करने की तुलना में धीमा होता है जैसे HTML डिज़ाइन को JSP पेज में बदलना।


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

समाधान: यह देखा जाना चाहिए कि क्या GWT बंद हो जाएगा, लेकिन यदि आप एक कंपनी के नियंत्रण में हैं जिसे आप किराए पर लेते हैं, तो आप हमेशा ऐसे लोगों को चुन सकते हैं जो या तो GWT को जानते हैं या इसे सीखना चाहते हैं।


समस्या: जीडब्ल्यूटी एक स्लेजहैमर है, जो कि जक्वेरी या सिर्फ सादे जावास्क्रिप्ट जैसी किसी चीज की तुलना में है। यह एक जेएस फ़ाइल को शामिल करने की तुलना में बहुत अधिक सेटअप लेता है।

समाधान: पुस्तकालयों का उपयोग करें जैसे छोटे, सरल कार्य जो उन के अनुकूल हैं। जब आप AJAX में कुछ वास्तव में जटिल बनाना चाहते हैं, या जहां आपको RPC तंत्र के माध्यम से अपना डेटा आगे-पीछे करने की आवश्यकता है, तो GWT का उपयोग करें।


समस्या: कभी-कभी अपने GWT पेज को पॉप्युलेट करने के लिए, आपको पेज को पहले लोड करने पर सर्वर कॉल करना होगा। उपयोगकर्ता के लिए वहां बैठना और लोडिंग सिंबल देखना आपके लिए कष्टप्रद हो सकता है, जबकि आपको उस डेटा की आवश्यकता होती है।

समाधान: JSP पृष्ठ के मामले में, आपका पृष्ठ HTML बनने से पहले सर्वर द्वारा प्रस्तुत किया गया था, इसलिए आप वास्तव में अपने सभी GWT कॉल तब कर सकते हैं, और पृष्ठ पर उन्हें पूर्व-लोड कर सकते हैं, त्वरित लोड के लिए। विवरण के लिए यहां देखें:

अपने GWT कॉल को पूर्व-क्रमबद्ध करके पृष्ठ लोड करना तेज़ करें


मुझे कोई समस्या नहीं है सीएसएस मेरे विजेट स्टाइल कर रहा है, बॉक्स से बाहर, कस्टम या अन्यथा, इसलिए मुझे नहीं पता कि आप इसका क्या मतलब है?

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


1
हमने कई मुद्दों में भाग लिया है, जहाँ विभिन्न शैलियों / पोजिशनिंग कमांड्स को "लेना" प्रतीत नहीं होता है - उन शैलियों का उपयोग नहीं किया जा रहा है जहाँ उन्हें होना चाहिए था, या किसी तत्व का आकार ऐसा प्रतीत होता है जो इसे 100% बनाने के अनुरोध को अनदेखा करता है। कई नियमित सीएसएस चुनौतियों के रूप में ही - काफी उपयोगकर्ता त्रुटि का एक बहुत!
एगार्टकेक

@agartzke हाँ, यह आपके लिए CSS है, और इसका ज्यादातर GWT से कोई लेना-देना नहीं है। इसलिए हम अपने लिए उस तरह के काम करने के लिए अत्यधिक कुशल डिजाइनरों को नियुक्त करते हैं। 4 अलग-अलग ब्राउज़रों में इसे प्राप्त करना कभी आसान काम नहीं है।
जंगमशैल

1
इस वर्ष के अंत में आने वाली कई नई सुविधाएँ हैं जो इन मुद्दों में बहुत सुधार करती हैं। आउट-ऑफ-प्रोसेस होस्टेड मोड (OOPHM), CssResource (स्टाइलशीट ऑब्सडेशन / मिनिफ़िकेशन), UBBinder (उर्फ 'Declarative UI')।
मार्क रेनॉफ

मैं 2.0 की प्रतीक्षा कर रहा हूं, लेकिन मुझे GWT के स्लेज हैमर होने से असहमत होना पड़ेगा। अगर यही स्थिति है तो jQuery और जावास्क्रिप्ट सबसे अच्छे हैं। मेरी बात यह है कि मुझे कोई पुनः उपयोग नहीं मिलता है, मैं बहुत सी चीजों को कॉपी-पेस्ट करता हूं (जैसे: 4 पृष्ठों पर एक टेक्स्ट बॉक्स जो प्रत्येक स्थान पर पहचान का व्यवहार करता है)। यह कहना है कि आप अपने सभी पुराने अनुप्रयोगों को टॉस न करें। मैं (लगभग) एक मौजूदा html / js एप्लिकेशन में क्षमता जोड़ने के लिए GWT का उपयोग कभी नहीं करूंगा। इसके अलावा सीएसएस संसाधन इनक्यूबेटर में हैं और मैं उन्हें पसंद करता हूं: stackoverflow.com/questions/1066250/gwt-html-file-with-css/…
क्रिस रफ़लो जूल

2
आप JQuery का फिर से उपयोग कर सकते हैं, जितना कि आप GWT का फिर से उपयोग कर सकते हैं, मुझे नहीं लगता कि यह एक मान्य तर्क है। वे दोनों विरासत का समर्थन करते हैं, और फिर दोनों को पुन: उपयोग के लिए पैक किया जा सकता है (GWT के लिए .jar फ़ाइल, JQuery के लिए .js फ़ाइल)। मैंने कहा कि मैं GWT एक स्लेजहैमर हूं, आपको इसे जावा में कोड करना होगा, आपको इसे संकलित करना होगा, आपके पास प्रबंधन करने के लिए और भी बहुत सारी चीजें होंगी। यदि आप एक ईंट की दीवार को तोड़ना चाहते हैं, तो आप स्लेजहेमर को चुनें। यह एक उचित बिंदु नहीं है। सही काम के लिए सही उपकरण।
जंगीशेलफ

54

हम लगभग 2 वर्षों से gwt के साथ काम कर रहे हैं। हमने बहुत कुछ सीखा है। यहाँ हम सोचते हैं:

  1. विशेष रूप से gwt-ext तृतीय पक्ष विजेट लाइब्रेरी का उपयोग न करें। यह आपके डिबगिंग, विकास और रनटाइम प्रदर्शन को मार देगा। यदि आपके पास यह कैसे होता है के बारे में प्रश्न हैं, तो मुझसे सीधे संपर्क करें।

  2. Gwt का उपयोग केवल अपने ऐप्स के डायनेमिक भागों में भरने के लिए करें। इसलिए यदि आपके पास बहुत सारे फ़ील्ड के साथ कुछ जटिल उपयोगकर्ता इंटरैक्शन हैं। हालाँकि, इसके साथ आने वाले पैनलों का उपयोग न करें। अपने मौजूदा स्टॉक डिज़ाइनर आपूर्ति किए गए पृष्ठों को लें। उन क्षेत्रों को बाहर निकालें जिनमें आपके ऐप के नियंत्रण होंगे। इन नियंत्रणों को पृष्ठ पर OnModuleLoad () में संलग्न करें। इस तरह आप अपने डिजाइनर से मानक पृष्ठों का उपयोग कर सकते हैं और gwt के बाहर सभी स्टाइलिंग भी कर सकते हैं।

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

अन्य टिप्पणीकारों के भी कुछ अच्छे सुझाव थे। अंगूठे का उपयोग करने का नियम उन पृष्ठों को बनाना है जैसे आप एक मानक वेब पेज कर रहे थे। फिर उन टुकड़ों को बाहर निकालें जो गतिशील होने की आवश्यकता है। उन तत्वों से प्रतिस्थापित करें जिनके पास आईडी है और फिर RootPanel.get( id ).add( widget )उन क्षेत्रों को भरने के लिए उपयोग करें।


मैंने stackoverflow.com/q/10025656/138585 पर आपके प्रश्न के बारे में एक प्रश्न खोला । अगर आपकी नज़र पड़ सकती है तो मैं सराहना करूँगा।
एलाड

20

हमारे द्वारा चलाए जाने वाले नुकसान:

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

  • आपकी टीम में ऐसा कोई नहीं है जो CSS जानता हो। मेरे अनुभव से, यह मायने नहीं रखता था कि वह व्यक्ति विशेषज्ञ नहीं था ... यह पर्याप्त है कि उसे कुछ अच्छा काम करने का ज्ञान है, और आवश्यक होने पर Google को सही शब्द पता है।

  • ब्राउज़र में डिबगिंग। आउट ऑफ प्रोसेस होस्टेड मोड [ 1 ] [ 2 ] [ 3 ] पर ध्यान रखें, उम्मीद है कि GWT १.६ में आ रहा है ... अभी के लिए, आपको बस होस्ट मोड के साथ चीजों को प्राप्त करना है, फिर "कंपाइल / ब्राउज" बटन का उपयोग करें , जहां आप अन्य ब्राउज़रों के साथ खेल सकते हैं। मेरे लिए, विंडोज पर काम करना, इसका मतलब है कि मैं फायरफॉक्स में अपना काम देख सकता हूं, और ट्वीक की मदद करने और चीजों को बेहतर बनाने के लिए फायरबग का उपयोग कर सकता हूं।

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

    .my-style { /* stuff that works most everywhere */ }
    
    .msie6 .my-style { /* "override" so that styles work on IE 6 */ }

अंत में, सुनिश्चित करें कि आप एक संपादक का उपयोग करते हैं जो आपकी सहायता करता है। मैं IntelliJ का उपयोग करता हूं - इसे बहुत सारे GWT स्मार्ट मिले हैं। उदाहरण के लिए, यदि मैं एक वर्ग का उपयोग करने का प्रयास करता हूं जो कि JRE एमुलेशन द्वारा नियंत्रित नहीं किया जाता है, तो यह मुझे बता देता है; यदि मैं एक विजेट के लिए एक शैली निर्दिष्ट करता हूं, और मैंने अभी तक उस शैली को परिभाषित नहीं किया है, तो कोड थोड़ा लाल हो जाता है ... या तो, सीएसएस को देखते समय, यह मुझे बताएगा कि मैंने एक में परस्पर विरोधी विशेषताओं को निर्दिष्ट किया है एकल नियम। (मैंने अभी तक इसकी कोशिश नहीं की है, लेकिन मैं समझता हूं कि संस्करण 8 में GWT का बेहतर समर्थन है, जैसे "स्थानीय" और "async" RPC इंटरफेस और कार्यान्वयन सिंक में। "


18

GWT 2.0, जिसे अगले कुछ महीनों में कभी-कभी बाहर आना चाहिए, चर्चा के मुद्दों का एक बहुत हल करता है।

  • वाक्यविन्यास की तरह html / xml का उपयोग करके लेआउट बनाएँ
  • डायनामिक स्क्रिप्ट लोडिंग - केवल आवश्यक जेएस को शुरू में डाउनलोड किया जाएगा। बाकी को आवश्यकतानुसार डाउनलोड किया जाएगा
  • इन-ब्राउज़र होस्टेड मोड - यह अन्य लाभों के बीच चर्चा की गई होस्टेड मोड स्पीड मुद्दों की देखभाल कर सकता है
  • "कंपाइलर ऑप्टिमाइज़ेशन" - तेज़ संकलन, उम्मीद है

Google I / O पर GWT 2.0 पूर्वावलोकन वीडियो


15

"पर काबू पाने में असमर्थ" लेकिन कुछ बुनियादी के लिए दर्द का एक सा।

तारीख से निपटने:

GWT java.util.Dateग्राहक पक्ष पर तारीखों से निपटने के दौरान अनिर्धारित व्यवहार का नेतृत्व कर सकता है। java.util.CalendarGWT द्वारा समर्थित नहीं है। अधिक जानकारी यहाँ

संबंधित समस्या के उदाहरण:


1
दो साल बाद, और यह अभी भी मामला है। यह क्लाइंट पर डेट गणित करने के लिए काफी कष्टप्रद है।
जोसेफ लस्ट

मुद्दा java.util.Calendarजावास्क्रिप्ट से अनुवाद (संकलन) है । तुम भी पर एक नज़र हो सकता है GWT की क्लासCalendarUtil , कैसे GWT में java.util.Calendar उपयोग करने के लिए और कैसे जावा GWT में कैलेंडर संचालन करना है? डेट में दिन कैसे जोड़ें? । चीयर्स;)
ऑलिब्रे

10

मैं पहले से बताए गए कुछ बिंदु जोड़ूंगा:

  • Databinding / मान्यता। GWT में बॉक्स से बाहर डेटाबाइंडिंग / वेलिडेशन सपोर्ट नहीं है, हालांकि इस क्षेत्र में कुछ परियोजनाएँ उभरने लगी हैं। आप खुद को इसके बारे में लिखेंगे:
TextField fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • धीरे लोड हो रहा है। चूंकि gwt क्लाइंट की तरफ है, इसलिए आलसी लोडिंग वास्तव में एक विकल्प नहीं है। आपको अपने RPC और डोमेन ऑब्जेक्ट को ध्यान से डिज़ाइन करना होगा
    • अपने सभी ऑब्जेक्ट डेटा भेजें जो आवश्यक है
    • अपने सभी डेटा को प्राप्त करने से बचें
    • आपको यह भी सुनिश्चित करना होगा कि आप परदे के पीछे / गैर धारावाहिक वस्तुओं को नहीं भेजेंगे। hibernate4gwt आपको इन बिंदुओं की मदद कर सकता है।
  • यूआई डिजाइन। Html की तुलना में java (Panels, Buttons, आदि) में UI की कल्पना करना कठिन है।
  • इतिहास का सहारा। GWT एक हिस्ट्री सबसिस्टम के साथ जहाज नहीं करता है, और न ही अच्छे यूआरएल या स्टेटफुल बुकमार्किंग के लिए किसी सबसिस्टम के साथ जहाज करता है। आपको अपना स्वयं का रोल करना होगा (हालाँकि इसमें इतिहास टोकन के लिए समर्थन है, जो एक शुरुआत है)। यह सब AJAX टूलकिट AFAIK के साथ होता है।

आईएमएचओ, जीडब्ल्यूटी एक रूपरेखा याद कर रहा है जो इस 'थ्रेड' पर उल्लिखित सभी मुद्दों के लिए बॉक्स समर्थन से बाहर है।


GWT एक इतिहास प्रणाली के साथ जहाज करता है, जैसे History.newItem ("myItem", false); आसान बुकमार्क करने के लिए url में #myItem डालेंगे। अपने ऐप के साथ बुकमार्क लोड करने वाले किसी व्यक्ति को संभालने के लिए, बस History.addValueChangeHandler (myHandlerMethod) का उपयोग करें;
ज़ट्र्रेंजर

यह प्रति इतिहास प्रणाली नहीं है, यह केवल URL लिखने और टोकन परिवर्तन सूचनाओं को संभालने के लिए एक तंत्र है। इतिहास परिवर्तन को संभालने के लिए आपको अभी भी सभी ऐप कोड लिखने होंगे।
मिगेल पिंग

9

मैं अभी एक ऐसी परियोजना पर काम कर रहा हूं जो EXT GWT (GXT) का उपयोग करता है जो GWT EXT के साथ भ्रमित नहीं होना चाहिए। एक अंतर है, EXT GWT वह है जो वास्तव में कंपनी द्वारा उत्पादित किया जाता है जिसने एक्स्टाज को जावास्क्रिप्ट लाइब्रेरी लिखा था। GWT EXT, एक्सजेएस लाइब्रेरी के आसपास एक GWT रैपर है। GXT देशी GWT है।

वैसे भी, GXT अभी भी कुछ हद तक अपरिपक्व है और एक ठोस समुदाय का अभाव है जो मुझे लगता है कि GWT EXT है। हालाँकि, भविष्य GXT के साथ है, क्योंकि यह देशी GWT है और वास्तव में कंपनी द्वारा विकसित किया गया है जिसने एक्सटीजेएस बनाया है। GWT EXT कुछ हद तक अपंग है क्योंकि ExtJS लाइब्रेरी पर लाइसेंस बदल गया, इस प्रकार GWT EXT का विकास धीमा हो गया।

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

GWT EXT पर अधिक जानकारी के लिए: http://gwt-ext.com/

EXT GWT (GXT) के बारे में अधिक जानकारी के लिए: http://extjs.com/products/gxt/


1
चूंकि यह प्रश्न अभी भी सक्रिय है और वोट प्राप्त कर रहा है, मैंने सोचा कि मैं एक अपडेट प्रदान करूंगा। मैंने GXT (2009-2010) को पूरी तरह से डुबो दिया क्योंकि मुझे स्नेचा इंक की व्यावसायिक पद्धतियां पसंद नहीं थीं। मैंने बाद में GWT खाई। मैं इतनी देर तक जावास्क्रिप्ट का उपयोग करके भयभीत रहा जब तक कि मैं इसे नफरत करने के लिए उपयोग करता हूं। यही है, जब तक मैं वास्तव में इसे समझ नहीं पाया। अब मैं लगभग विशेष रूप से Node.js / AngularJS में विकसित करता हूं। बूटस्ट्रैप 3 में टॉस और आप GWT की तुलना में बहुत कम समय में एक भयानक दिखने वाली वेबसाइट बना सकते हैं। भविष्य जावास्क्रिप्ट है, इससे पहले कि आप इसे गले लगाते हैं, बेहतर डेवलपर आप होंगे।
जेपी रिचर्डसन

अब आपकी क्या राय है? (बस जिज्ञासु) धन्यवाद।
अकोस लुकाक्स

1
@AkosLukacs मैं अभी भी रिपोर्ट कर सकता हूं कि मैं जावास्क्रिप्ट का उपयोग कर रहा हूं और इसके हर बिट को प्यार कर रहा हूं! जैसा कि मैंने कहा, मैं HATE JavaScript का उपयोग करता हूं और इसलिए मैंने GWT को चुना। वास्तविकता यह है कि यदि आप कोई भी वेब डेवलपमेंट करने जा रहे हैं तो आप जावास्क्रिप्ट से बच नहीं पाएंगे, इसलिए आप इसे अपना सकते हैं। मैं सब कुछ के लिए जावास्क्रिप्ट का उपयोग करने के लिए बहुत ज्यादा अनुकूलित हूं (गो के साथ थोड़ा चक्कर लिया)। जहां तक ​​मेरा स्टैक जाता है, मैं Node.js / Express / React का उपयोग करता हूं। मैं एंगुलर का बहुत बड़ा प्रशंसक हूं और इसे अच्छी तरह जानता हूं, लेकिन मैं जेएस से शुरू करने वाले किसी भी व्यक्ति को कोणीय 1.x की सिफारिश नहीं कर सकता क्योंकि सीखने की अवस्था बहुत अधिक है।
जेपी रिचर्डसन

5

कोई बड़ी गड़बड़ी जिसे मैं आसानी से दूर नहीं कर पाया। होस्टेड मोड का भारी उपयोग करें। जब आप GWT-ext का उपयोग कर रहे हैं, तो आपको लगभग खुद को सीएसएस को छूने की कभी आवश्यकता नहीं होगी जब तक कि आप आउट ऑफ द बॉक्स लुक को ट्वीक नहीं करना चाहते।

मेरी सिफारिश एक पुस्तकालय में एक GWT "देशी" विजेट का उपयोग करने की है, जहां वे सुविधाओं में करीब हैं।

खोज इंजन अनुक्रमण फिर से करें: हाँ साइट में सामान्य रूप से नेविगेट करने योग्य URL नहीं होंगे (जब तक कि आप केवल एक नियमित वेब साइट के तत्वों में विजेट नहीं जोड़ रहे हैं)। आप इतिहास को वापस कर सकते हैं / आगे की कार्यक्षमता।


4

मैंने थोड़ी देर पहले एक प्रोजेक्ट पर GWT और GWT-ext का एक साथ उपयोग किया था। वेब डेवलपमेंट के चलते मुझे अनुभव काफी सुगम लगा, लेकिन मेरी सलाह यही होगी:

EXW विगेट्स के साथ GWT देशी विजेट मिक्स न करें। यह नरक के रूप में भ्रामक है, क्योंकि आमतौर पर नाम समान हैं (GWT.Button या GWText.Button?)

एक चीज जो मेरे साथ हुई, वह वास्तव में कोड को मुझसे अधिक जटिल बनाता था, वह यह था कि मैं एक ऐसा पैनल चाहता था जो एक) गतिशील रूप से अपूरणीय बी) कैस्केडेबल हो

GWT देशी पैनल गतिशील हैं, एक्सट्रीम पैनल कैस्केडेबल हैं। उपाय? एक GWT.VerticalPanel एक GWTExt पैनल लपेटकर ... अराजकता। :)

लेकिन हे, यह काम करता है। ;)


4

मैं yakagano से दूसरी टिप्पणी करता हूं, सबसे बड़ा नुकसान एमवीसी में वी खो रहा है। यद्यपि आप अपने ग्राहक पक्ष के बाकी कोड से सही ui वर्ग को अलग कर सकते हैं, आप ग्राफिक / वेब डिज़ाइनर द्वारा उत्पन्न HTML पृष्ठ का आसानी से उपयोग नहीं कर सकते। इसका मतलब है कि आपको HTML में जावा का अनुवाद करने के लिए एक डेवलपर की आवश्यकता है।

एक wysiwyg यूआई संपादक प्राप्त करें, यह आपको बहुत समय बचाएगा। मैं GWTDesigner का उपयोग करता हूं।

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

ओह और इसके तेजी से रनटाइम पर, खासकर यदि आप एक गज़िप फ़िल्टर का उपयोग करते हैं।


1
Gzip फ़िल्टर के बारे में नहीं पता था - उस tidbit के लिए धन्यवाद।
एगार्टकेक

4

थोड़ा ऑफ-टॉपिक, लेकिन irc पर #gwt चैनल बहुत मददगार है, अगर आपके पास लगातार समस्या है।


आईआरसी नेटवर्क किस चैनल पर है?
21

यह freenode (irc.freenode.net) पर है। और यह वास्तव में ## gwt है, लेकिन अगर आप #gwt टाइप करते हैं तो आपको इसे भेज दिया जाएगा।
स्टियन

4

GWT बहुत सीधा-आगे और सहज है।

विशेष रूप से UIBinder की रिलीज़ के साथ GWT विजेट्स को XML में और फिर कोडेड-पीछे जावा में रखने की अनुमति देने के लिए।

इसलिए यदि आपने अन्य अजाक्स या फ्लैश डिजाइन उपकरण, या सिल्वरलाइट, आदि का उपयोग किया है, तो GWT सीखना बहुत आसान है।

बड़ी बाधा, अगर नहीं होती है, तो GWT RPC है। GWT का उपयोग करने की आपकी इच्छा का कारण GWT async RPC है। अन्यथा, सिर्फ अपने पृष्ठ को प्रारूपित करने के लिए सीएसएस पर निर्भर क्यों न हों?

GWT RPC वह तत्व है जो आपके सर्वर को पृष्ठ को रीफ्रेश किए बिना आपके सर्वर पर डेटा ताज़ा करने की अनुमति देता है। यह स्टॉक प्रदर्शन मॉनिटरिंग (या अमेरिका के वर्तमान राष्ट्रीय और सार्वजनिक ऋण या दूसरे द्वारा दुनिया भर में गर्भपात किए गए शिशुओं की संख्या) जैसे पृष्ठों के लिए एक पूर्ण आवश्यकता है।

GWT RPC को समझने के लिए कुछ प्रयास करते हैं लेकिन कुछ घंटों को देखते हुए, यह सब स्पष्ट होना चाहिए।

इसके बाद, GWT RPC सीखने के लिए कुछ प्रयास करने के बाद, आपको अंततः पता चलता है कि आप JSP का उपयोग RPC के लिए सेवा घटक के रूप में नहीं कर सकते, जब तक ... मेरे पास JSP का उपयोग करने के तरीके पर मेरे ब्लॉग पर एक 8 भाग (मुझे लगता है) श्रृंखला है। GWT RPC सर्विसर के रूप में। हालाँकि, चूंकि आपने जवाब नहीं मांगा था, लेकिन सिर्फ मुद्दों पर, मैं अपने ब्लॉग के विज्ञापन से बचूंगा।

इसलिए। मैं बहुत विश्वास करता हूं कि GWT का उपयोग करने के लिए सबसे खराब बाधाएं / नुकसान यह पता लगा रहे हैं कि GWT async RPC को कैसे ठीक से तैनात किया जाए और JSP सर्वर का उपयोग करने के लिए इसे कैसे सक्षम किया जाए।


मैं आपके ब्लॉग लेखों का लिंक चाहूंगा;)
एमएस-टीजी

h2g2java.blessedgeek.com
धन्य Geek

3

हमें HTML वेब टेम्पलेट्स के साथ अपने GWT कोडबेस से शादी करने में बहुत कठिन समय मिला है जो हमें एक वेब डिजाइनर (विशिष्ट div id के साथ स्थिर HTML पृष्ठों से मिला है जिसे हम GWT प्रबंधित करना चाहते थे)। कम से कम जब हम इसका उपयोग करते हैं, तो हम अपनी वेबसाइट के उन हिस्सों के साथ एकीकरण करने के लिए GWT नहीं प्राप्त कर सकते हैं जिन्हें GWT में कोडित नहीं किया गया था। हमारे पास अंततः यह काम कर रहा था, लेकिन यह एक बड़ा हैक था।


3
  • प्रत्येक सर्विस इंटरफ़ेस के लिए आपको जो Async इंटरफ़ेस लिखना है वह कुछ ऐसा दिखता है जो GWT कंपाइलर द्वारा स्वचालित रूप से जेनरेट किया जा सकता था।
  • बड़ी परियोजनाओं के लिए संकलन समय लंबा हो जाता है

लेकिन एक बड़ी जावास्क्रिप्ट परियोजना के लिए यह सबसे अच्छा विकल्प है


3

GWT 2.4 ने कई उपरोक्त मुद्दे तय किए हैं और एक शानदार विजेट लाइब्रेरी सिर्फ बीटा (एक्सट्रीम GWT 3.0.4 उर्फ ​​GXT) से निकल रही है, जो पूरी तरह से GWT में लिखा गया है, न कि JS lib का आवरण।

शेष दर्द:

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

2

GWT 2.4 के बारे में, GWT को डीबग करते समय फ़ायरफ़ॉक्स का उपयोग करें , यह क्रोम का उपयोग करते हुए अधिक तेजी से बहुत अधिक है। और यदि आप केवल फ़ायरफ़ॉक्स का उपयोग कर रहे हैं, तो इस लाइन को अपने प्रोजेक्ट में डालने पर विचार करें। gwt.xml फ़ाइल

<set-property name="user.agent" value="gecko1_8" />

इसके अलावा, यदि आप ग्रहण का उपयोग कर रहे हैं, तो तर्कों के नीचे निम्नलिखित जोड़ें -> वीएम तर्क:

-Xmx512m -XX: MaxPermSize = 1024m -XX: PermSize = 1024m

आप अपने सर्वर और क्लाइंट को विभाजित कर सकते हैं, और तर्कों के तहत निम्नलिखित का उपयोग कर सकते हैं -> प्रोग्राम तर्क: -codeServerPort 9997 -startupUrl http: // yourserver / project -noserver

इसके अलावा, प्रत्येक परिवर्तन पर अपने सर्वर को ताज़ा करने से रोकने के लिए, JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ का उपयोग करें और यहाँ एक लाइव डेमो http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY


1

एक प्रमुख नुकसान यह है कि कभी-कभी आपको स्पष्ट रूप से एक आईडी असाइन करने की आवश्यकता होती है जो अंततः एक HTML तत्व बन जाता है जो कुछ सीएसएस शैलियों का उपयोग करने में सक्षम होता है। उदाहरण के लिए: एक GWT TabPanel केवल करेगा: tabBarItems पर होवर करें जब tabPanel के टैब को एक आईडी असाइन किया गया हो और आप उस elementId पर a: hover निर्दिष्ट करें।

मैंने अन्यत्र GWT के कुछ अन्य नुकसानों के बारे में लिखा है, लेकिन वे पहले से ही जंग खाए हुए उत्तर :) से आच्छादित हैं।


यदि आप सेलेनियम का उपयोग करके परीक्षण करने की योजना बनाते हैं, तो आमतौर पर आईडी असाइन करना कोई बुरी बात नहीं है।
पेट्री हेटेविर्टा

1

मैंने हाल ही में GWT पर बहुत काम किया है, और मुझे यह कहना है:

  1. CSS स्टाइलिंग केवल कभी-कभी मुश्किल होती है, IE में IE डेवलपर टूल का उपयोग करें और फ़ायरफ़ॉक्स में फ़ायरबग का पता लगाने के लिए कि वास्तव में क्या हो रहा है और आपको स्पष्ट रूप से पता चल जाएगा कि सीएसएस को बदलने की क्या आवश्यकता है
  2. इसे इंडेक्स करने के लिए आप ट्रिक्स का इस्तेमाल कर सकते हैं। एक बहुत ही प्रसिद्ध साइट है http://examples.roughian.com/ गूगल पर इसकी रेटिंग की जाँच करें। एक बहुत कम प्रसिद्ध साइट है www.salvin.in (इसका उल्लेख करने के लिए विरोध नहीं किया जा सकता है), मैंने इसे शब्दों के लिए अनुकूलित किया: सल्विन होम पेज (इन तीन शब्दों के लिए Google खोजें)

मुझे GWT-EXT के बारे में ज्यादा जानकारी नहीं है, लेकिन मैं यह भी मानता हूं कि थर्ड पार्टी लाइब्रेरी को शामिल करने की कोई जरूरत नहीं है।

आपके निर्णय पर शुभकामनाएँ :)


1

1

GWT टीम ने पिछले साल GWT 2.7 को रिलीज़ करने में बहुत सुधार किया है। जीडब्ल्यूटी की एक बड़ी कमजोरी यह थी कि जीडब्ल्यूटी 2.6 और उससे नीचे में संकलन में अधिक समय लगता है। यह अब चला गया है GWT ने वृद्धिशील संकलन नहीं किया है जो सुपर फास्ट है और केवल परिवर्तनों को संकलित करता है।

GWT 2.7 अब ( स्रोत ) है:

  • वृद्धिशील अब सिर्फ सेकंड बनाता है
  • अधिक कॉम्पैक्ट, अधिक सटीक SourceMaps
  • जीएसएस समर्थन
  • JSInterop
  • ग्रेट जावास्क्रिप्ट प्रदर्शन
  • छोटे कोड का आकार

1

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

यह ध्यान देने योग्य है कि GWT 3.0 बड़े पैमाने पर सुधार लाएगा।


0

RPC सेवा ऑब्जेक्ट का पुन: उपयोग करना।
यह उन लक्षणों के साथ दौड़ की स्थिति का कारण बनता है जो ऐप हैंगिंग की तरह दिखते हैं।


एंटनी आपको इस बारे में विस्तार से बता सकते हैं। मैं सर्वर पर एक आरपीसी कॉल कर रहा हूं और जीयूआई से प्रतिक्रिया की उम्मीद कर रहा हूं जब तक कि अनुरोध वापस नहीं आता है लेकिन यह लटका हुआ प्रतीत होता है।
ब्रेट हन्ना

0

नुकसान मैं 1 में भाग गया। सुपरदेव मोड में विभिन्न व्यवहार। Eg Someclass.class.getName () सुपरदेव मोड में बिल्कुल ठीक काम करता है और कक्षा के पूरी तरह से योग्य नाम देता है। उत्पादक मोड में यह काम नहीं करता है।

  1. AddWidget (विजेट) विजेट के रिमूवफ्रॉमेंट () को कॉल करेगा

0

GWT एक प्रौद्योगिकी कृति है। यह क्लाइंट और सर्वर प्रोग्रामिंग को एक सुसंगत अनुप्रयोग बनाते हुए एकजुट करता है - जिस तरह से सॉफ्टवेयर "लेयरिंग" से पहले लिखा गया था, और जिस तरह से इसे लिखा जाना चाहिए। यह अलग-अलग कौशल सेट, टीम के सदस्यों के बीच गलतफहमी और आम तौर पर पूरे वेब डिज़ाइन चरण को समाप्त करता है: कलात्मक और प्रोग्रामिंग दोनों। और यह आपके निकटतम मोबाइल है जैसे कि Android विकास। वास्तव में GWT को केवल HTML नहीं, बल्कि अलग-अलग देशी UI बनाने के लिए डिज़ाइन किया गया था। हालांकि इस तरह के डिकोडिंग को सुनिश्चित करने के लिए भारी अनुशासन की आवश्यकता होती है - अपनी आंतरिक परतों की प्रस्तुति-अज्ञेय को बनाए रखने के लिए।

पहली गलती से आपको बचना चाहिए, जिसे महसूस करने में मुझे चार साल लग गए, EXT-GWT उर्फ ​​GXT और SmartGWT जैसे थर्ड-पार्टी एक्सटेंशन का उपयोग कर रहा है। अपने स्टाइल में निवेश करने के बजाय अपने सुंदर डेस्कटॉप विजेट का उपयोग करना शुरू करना बहुत ही आकर्षक है, लेकिन मैं यह नहीं बता सकता कि मुझे स्मार्टगॉट के साथ कितनी समस्याएं थीं जब तक कि मैं अंततः तंग नहीं आया। संक्षेप में यह निश्चित (बहुत पुरानी) स्तर पर स्थापित कोर GWT सुविधा को जमा देता है और फिर इसके शीर्ष पर बनाता है। यह भी ध्यान रखें, कि छेनी वाला डेस्कटॉप लुक और फील आजकल मूर्खतापूर्ण लगता है, न कि सुस्त प्रदर्शन, बग, टन और अनुकूलता के फीचर्स का उल्लेख। आप मूल ब्राउज़र नियंत्रणों के करीब रहना चाहते हैं, जहाँ तक संभव है कि ड्रॉपडाउन देशी <select> तत्वों के रूप में प्रस्तुत किया जाता है, न कि कुछ कस्टम-पेंट नियंत्रणों के।

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

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

कुछ स्व-घोषित "एंटी-पैटर्न" हैं जैसे कि GWT-RPC का उपयोग न करें। यह मेरे लिए अब तक अच्छा रहा है: 10 साल तक। सादगी महत्वपूर्ण है। मैं कोड लालित्य और स्थिरता के लिए कुछ सीमांत प्रदर्शन का त्याग करने के लिए एक सेकंड भी नहीं सोचूंगा। इसके अलावा डेटाबेस में आपकी अड़चनें कहां नहीं होंगी। ज़ाहिर है कि आप क्लाइंट को कितना डेटा भेज रहे हैं।

और यदि आप मौजूदा गैजेट को ढूंढ या शैली नहीं दे सकते हैं - समृद्ध एचटीएमएल 5 तत्व सेट पढ़ें, तो आप हमेशा एक तृतीय-पक्ष लपेट सकते हैं। मैंने इसे एक लोकप्रिय jQuery FullCalendar के साथ किया। रॉकेट साइंस बिल्कुल नहीं। Google मैप्स और Google चार्ट जैसे सभी चीजों में अर्ध-आधिकारिक जीडब्ल्यूटी आवरण हैं।

GWT एकदम सही है। एकमात्र कारण यह पर्याप्त प्यार नहीं करता है क्योंकि प्रारंभिक इंटरनेट अपनाने वाले जो अभी भी उद्योग को प्रभावित करते हैं वे कंप्यूटर विज्ञान और ऑब्जेक्ट-ओरिएंटेड भाषाओं से सराहना करने के लिए नहीं आए थे। उनके पास कलात्मक (फ़ोटोशॉप / वर्डप्रेस) या नेटवर्क (पर्ल / पायथन) पृष्ठभूमि है।

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