En büyük GWT Tuzakları? [kapalı]


189

GWT kullanarak uygulamayı seçtiğimiz bir projenin başında / ortasındayım. Herkes GWT (ve GWT-EXT) kullanımında üstesinden gelinemeyen önemli tuzaklarla karşılaştı mı? Performans açısından nasıl?

Gördüğümüz / duyduğumuz birkaç şey şunları içerir:

  • Google içeriği dizine ekleyemiyor
  • CSS ve stil genel olarak biraz lapa lapa gibi görünüyor

Bu öğelerle ilgili ek geri bildirimler mi arıyorsunuz? Teşekkürler!


4
Son zamanlarda, temel html aradığım bilgileri içermese de, GWT tabanlı bazı web sitelerinin Google arama sonuçlarımda doğru bir şekilde geldiğini fark ettim (samples.roughian.com bu tür sonuçların birkaçına sahiptir). Görünüşe göre Google dizin oluşturucusunun, her şey yüklendikten sonra bir sayfada gerçekte ne gösterileceğini anlamak için bazı akıllı javascript oluşturma işlemleri yapması gerekiyor.
StriplingWarrior

Yanıtlar:


231

Ben büyük bir GWT hayranı olduğumu söyleyerek başlayacağım, ama evet birçok tuzak var, ama çoğu olmasa bile üstesinden gelebildik:

Sorun: Uzun derleme süreleri, projeniz büyüdükçe, derlemek için gereken süre de artar. 20 dakikalık derlemelerin raporlarını duydum, ama benimki ortalama 1 dakika.

Çözüm: Kodunuzu ayrı modüllere ayırın ve karıncaya yalnızca değiştirildiğinde değişiklik yapmasını söyleyin. Ayrıca geliştirirken, yalnızca bir tarayıcı için derleme yaparak derleme sürelerini büyük ölçüde hızlandırabilirsiniz. Bunu .gwt.xml dosyanıza koyarak yapabilirsiniz:

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

Gecko1_8, Firefox 2+, ie6 IE vb.


Sorun: Barındırılan mod çok yavaş (en azından OS X'te) ve JSP'ler veya Rails sayfaları gibi şeyleri düzenleyip tarayıcınızda yenile düğmesine bastığınızda aldığınız 'canlı' değişikliklerle eşleşmiyor.

Çözüm: Barındırılan moda daha fazla bellek verebilirsiniz (genellikle 512M için aldım) ama yine de yavaş, GWT ile yeterince iyi olduğunuzda bunu kullanmayı bırakıyorsunuz. Büyük bir değişiklik yığını yaparsınız, daha sonra yalnızca bir tarayıcı (genellikle 20s derleme) için derler ve ardından tarayıcınızda yenilemeye basarsınız.

Güncelleme: Yeni 'Geliştirme Modu'nu kullandığınız için GWT 2.0+ ile bu artık sorun değil. Temel olarak, kodu doğrudan tarayıcınızda çalıştırabileceğiniz anlamına gelir, bu nedenle hız kaybı olmaz, ayrıca kundaklama yapabilir / inceleyebilirsiniz, vb.

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


Sorun: GWT kodu java ve bir HTML sayfası hazırlamak için farklı bir zihniyete sahip, bu da HTML tasarımını almayı ve GWT'ye dönüştürmeyi zorlaştırıyor

Çözüm: Yine buna alışırsınız, ancak maalesef bir HTML tasarımını GWT tasarımına dönüştürmek, HTML tasarımını JSP sayfasına dönüştürmek gibi bir şey yapmaktan her zaman daha yavaş olacaktır.


Sorun: GWT, başınızı döndürmek için biraz zaman alıyor ve henüz ana akım değil. Bu, ekibinize katılan veya kodunuzu koruyan çoğu geliştiricinin onu sıfırdan öğrenmek zorunda kalacağı anlamına gelir

Çözüm: GWT'nin başlayıp başlamayacağı görülmeye devam ediyor, ancak kimin kiraladığınızı kontrol eden bir şirketseniz, her zaman GWT'yi bilen veya öğrenmek isteyen insanları seçebilirsiniz.


Sorun: GWT, jquery veya sade javascript gibi bir şeyle karşılaştırıldığında bir balyoz. Bunun gerçekleşmesi için sadece bir JS dosyası eklemekten çok daha fazla kurulum gerekir.

Çözüm: Bunlar için uygun olan daha küçük ve basit görevler için jquery gibi kitaplıklar kullanın. AJAX'ta gerçekten karmaşık bir şey oluşturmak istediğinizde veya verilerinizi RPC mekanizması aracılığıyla ileri geri aktarmanız gerektiğinde GWT'yi kullanın.


Sorun: Bazen GWT sayfanızı doldurmak için, sayfa ilk yüklendiğinde bir sunucu çağrısı yapmanız gerekir. İhtiyacınız olan verileri getirirken kullanıcının orada oturması ve bir yükleme sembolü izlemesi can sıkıcı olabilir.

Çözüm: Bir JSP sayfası söz konusu olduğunda, sayfanız HTML olmadan önce sunucu tarafından zaten oluşturulmuştur, böylece tüm GWT çağrılarınızı yapabilir ve anında yükleme için sayfaya önceden yükleyebilirsiniz. Ayrıntılar için buraya bakın:

GWT aramalarınızı önceden serileştirerek Sayfa Yüklemeyi hızlandırma


Herhangi bir sorunla karşılaşmadım, widget'larımı kutudan, özel veya başka bir şekilde şekillendirmedim, bu yüzden bir tuzak olarak ne demek istediğini bilmiyorum?

Performansa gelince, her zaman bir kez derlenmiş GWT kodunun hızlı olduğunu ve AJAX çağrılarının neredeyse tüm sayfayı yenilemekten daha küçük olduğunu fark ettim, ancak bu, kullandığınız yerel RPC paketleri olsa da, GWT'ye gerçekten benzersiz değil bir JAVA arka ucu oldukça kompakttır.


1
Çeşitli stillerin / konumlandırma komutlarının "alması" gibi görünmediği birkaç sorunla karşılaştık - olması gereken yerlerde kullanılmayan stiller veya% 100 yapma isteğini yok sayıyor gibi görünen bir öğenin boyutu. Düzenli CSS zorluklarıyla aynı - büyük olasılıkla çok sayıda kullanıcı hatası!
agartzke

@agartzke evet, bu sizin için CSS ve çoğunlukla GWT ile ilgisi yok. Bu yüzden bizim için bu tür şeyleri yapmak için çok yetenekli tasarımcıları kullanıyoruz. 4 farklı tarayıcıda doğru yapmak asla kolay bir iş değildir.
rustyshelf

1
Bu yılın ilerleyen saatlerinde bu konuların çoğunu büyük ölçüde geliştiren pek çok yeni özellik var. İşlem Dışı Barındırılan Mod (OOPHM), CssResource (stil sayfası dağıtımı / minimizasyonu), UiBinder ('Bildirici Kullanıcı Arayüzü' olarak da bilinir).
Mark Renouf

2.0'ı dört gözle bekliyorum ama GWT'nin kızak çekiç olmasına katılmam gerekiyor. Bu durumda jQuery ve JavaScript en iyi ihtimalle bir ipucudur. Demek istediğim, yeniden kullanım elde edemiyorum, bir çok şeyi kopyalayıp yapıştırarak bitiriyorum (örneğin: her yerde aynı şekilde davranan 4 sayfada bir metin kutusu). Bu, tüm eski uygulamalarınızı atmanız gerektiği anlamına gelmez. (Neredeyse) asla mevcut html / js uygulamasına yetenek eklemek için GWT kullanmazsınız. Ayrıca CSS Kaynakları inkübatör ve ben onları seviyorum: stackoverflow.com/questions/1066250/gwt-html-file-with-css/… .
Chris Ruffalo

2
JQuery'yi GWT'yi tekrar kullanabildiğiniz kadar tekrar kullanabilirsiniz, bunun geçerli bir argüman olduğunu düşünmüyorum. Her ikisi de devralmayı destekler ve sonra yeniden kullanım için paketlenebilir (GWT için .jar dosyası, JQuery için .js dosyası). GWT'nin bir balyoz olduğunu söylediklerimin yanında duruyorum, Java'da kodlamanız gerekiyor, derlemelisiniz, yönetmeniz gereken çok şey var. Bir tuğla duvarı kırmak istiyorsanız, balyozu seçersiniz. Bu bir eleştiri değil, geçerli bir nokta. Doğru iş için doğru araç.
rustyshelf

54

Neredeyse 2 yıldır gwt ile çalışıyoruz. Birçok ders aldık. İşte düşündüklerimiz:

  1. Üçüncü taraf widget kütüphanelerini özellikle gwt-ext kullanmayın. Hata ayıklama, geliştirme ve çalışma zamanı performansınızı öldürür. Bunun nasıl gerçekleştiği hakkında sorularınız varsa, doğrudan benimle iletişime geçin.

  2. Uygulamalarınızın yalnızca dinamik bölümlerini doldurmak için gwt kullanın. Bu nedenle, birçok alanla karmaşık kullanıcı etkileşimleriniz varsa. Ancak, beraberinde gelen panelleri kullanmayın. Mevcut stok tasarımcısı tarafından sağlanan sayfaları alın. Uygulamanız için kontrolleri içerecek alanları belirleyin. Bu denetimleri onModuleLoad () içindeki sayfaya ekleyin. Bu şekilde tasarımcınızdan standart sayfaları kullanabilir ve ayrıca tüm stilleri gwt dışında da yapabilirsiniz.

  3. Uygulamanın tamamını, daha sonra tüm parçaları dinamik olarak oluşturan standart bir sayfa olarak oluşturmayın. 2. maddede önerdiğim şeyi yaparsanız, bu zaten olmayacak. Her şeyi dinamik olarak oluşturursanız, performansı öldürür ve orta ila büyük uygulamalar için büyük miktarda bellek kullanırsınız. Ayrıca, önerdiğim şeyi yaparsanız, geri düğmesi harika çalışır, bu nedenle arama motoru dizinleme vb.

Diğer yorumcular da bazı iyi öneriler vardı. Kullandığım kural, standart bir web sayfası gibi sayfalar oluşturmaktır. Ardından dinamik olması gereken parçaları oyun. Bunları id'leri olan öğelerle değiştirin ve sonra RootPanel.get( id ).add( widget )bu alanları doldurmak için kullanın .


Cevabınızla ilgili bir soru stackoverflow.com/q/10025656/138585 adresinden açtım . Bir göz atabilirseniz sevinirim.
Elad

20

Karşılaştığımız tuzaklar:

  • GWT EXT gibi bir şey kullanarak çok fazla kilometre alabilirsiniz, ancak bir JavaScript kütüphanesinin üstünde bu tür ince bir kaplama kullandığınızda hata ayıklama yeteneğini kaybedersiniz. Birden fazla kez kafamı masaya daldım çünkü (IntelliJ hata ayıklayıcının içinde) GWT EXT tablo sınıfında neler olduğunu kontrol edemiyorum ... Tüm görebildiğiniz bir JavaScriptObject. Bu neyin yanlış gittiğini bulmayı oldukça zorlaştırıyor ...

  • Takımınızda CSS bilen birine sahip olmamak. Deneyimlerime göre, kişinin uzman olmaması önemli değildi ... iyi bir çalışma bilgisine sahip olması ve gerektiğinde google için doğru şartları bilmesi yeterlidir.

  • Tarayıcılarda hata ayıklama. İşlem Dışı Barındırılan Mod [ 1 ] [ 2 ] [ 3 ] 'e göz atın, umarım GWT 1.6'ya gelir ... Şimdilik, barındırılan modda işleri iyi yapmanız ve ardından "Derle / Gözat" düğmesini kullanmanız yeterli. , diğer tarayıcılarla oynayabileceğiniz. Benim için Windows üzerinde çalışmak, FireFox'taki çalışmalarımı görüntüleyebileceğim ve ince ayar yapmaya ve işleri daha iyi hale getirmeye yardımcı olmak için FireBug'u kullanabileceğim anlamına geliyor.

  • IE6. IE 6'nın şeyleri nasıl oluşturacağı şaşırtıcı. CSS kurallarına sahip olabilmem için tarayıcıya göre en dıştaki "görünüm penceresine" bir stil uygulama yaklaşımını kullandım:

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

Son olarak, size yardımcı olacak bir düzenleyici kullandığınızdan emin olun. IntelliJ kullanıyorum - çok sayıda GWT zeki var. Örneğin, JRE öykünmesi tarafından işlenmeyen bir sınıfı kullanmaya çalışırsam, bana haber verir; bir widget için bir stil belirtirseniz ve henüz bu stili tanımlamamışsam, kod biraz kırmızı dalgalı bir şekilde alır ... Veya, CSS'ye bakarken, bir tek kural. (Henüz denemedim, ancak sürüm 8'in "yerel" ve "asenkron" RPC arayüzlerini ve uygulamalarını senkronize tutmak gibi daha iyi GWT desteğine sahip olduğunu anlıyorum.)


18

Önümüzdeki birkaç ay içinde ortaya çıkması beklenen GWT 2.0, tartışılan sorunların çoğunu çözüyor.

  • Bir html / xml benzeri sözdizimi kullanarak mizanpajlar oluşturun
  • Dinamik Komut Dosyası Yüklemesi - başlangıçta yalnızca gerekli JS indirilir. Gerisi gerektiği gibi indirilecek
  • Tarayıcı İçi Barındırılan Mod - Bu, diğer avantajların yanı sıra tartışılan barındırılan mod hızı sorunlarıyla ilgilenebilir
  • "Derleyici Optimizasyonları" - Daha hızlı derleme, umarım

Google I / O'da GWT 2.0 Önizleme Videosu


15

"Üstesinden gelinemez" ama temel bir şey için biraz acı.

Tarih işleme:

GWT java.util.Date, müşteri tarafında tarihlerle uğraşırken beklenmedik davranışlara yol açabilecek kullanımdan kaldırılmış olanı kullanır . java.util.CalendarGWT tarafından desteklenmiyor. Daha fazla bilgi burada .

İlgili problem örnekleri:


1
İki yıl sonra da durum hala böyle. İstemcide tarih matematiği yapmak için oldukça can sıkıcı bir durum.
Joseph Lust


10

Daha önce bahsedilenlere bazı noktalar ekleyeceğim:

  • Veri bağlama / doğrulama. GWT'nin kutudan çıktığı bir veritabanı / doğrulama desteği yok, ancak bu alanda ortaya çıkmaya başlayan bazı projeler var. Kendinizi bunun bir sürü yazarken bulacaksınız:
TextField fname, fadresi;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Yavaş yüklenme. Gwt istemci tarafında olduğundan, tembel yükleme gerçekten bir seçenek değildir. RPC'lerinizi ve Alan Nesnelerinizi dikkatlice tasarlamanız gerekir.
    • gereken tüm nesne verilerinizi gönderin
    • tüm verilerinizi almaktan kaçının
    • Ayrıca proxy / serileştirilemeyen nesneler göndermediğinizden emin olmanız gerekir. hibernate4gwt bu puanlarda size yardımcı olabilir.
  • UI tasarımı. Java'da bir kullanıcı arayüzünü (Paneller, Düğmeler, vb.) Html'den daha görselleştirmek daha zordur.
  • Tarih desteği. GWT, Geçmiş alt sistemiyle birlikte gönderilmez veya güzel URL'ler veya durum bilgisi içeren yer işareti için herhangi bir alt sistemle birlikte gönderilmez. Kendinize bakmanız gerekecek (bir başlangıç ​​olan Tarih jetonlarını desteklemesine rağmen). Bu, tüm AJAX araç kitleri AFAIK ile olur.

IMHO, GWT, bu 'iş parçacığında' belirtilen tüm sorunlar için kutudan çıkmış desteği olan bir çerçeveyi kaçırıyor.


GWT bir geçmiş sistemiyle birlikte gönderilir, örneğin History.newItem ("myItem", false); #myItem'i kolay yer imi için URL'ye koyacaktır. Uygulamanızla bir yer işareti yükleyen birini işlemek için History.addValueChangeHandler (myHandlerMethod);
Ztranger

Kendi başına bir geçmiş sistemi değil, sadece URL'ye jeton yazmak ve jeton değişiklik bildirimlerini işlemek için bir mekanizmadır. Geçmiş değişikliğini işlemek için yine de tüm uygulama kodunu yazmanız gerekir.
Miguel Ping

9

Şu anda GWT EXT ile karıştırılmaması gereken EXT GWT (GXT) kullanan bir proje üzerinde çalışıyorum. Bir fark var, EXT GWT aslında ExtJS'yi javascript kütüphanesini yazan şirket tarafından üretilen. GWT EXT, ExtJS kütüphanesinin etrafındaki bir GWT paketleyicisidir. GXT yerel GWT'dir.

Her neyse, GXT hala biraz olgunlaşmamış ve GWT EXT'nin hissettiğim sağlam bir topluluktan yoksun. Ancak, yerel GWT olduğu ve aslında ExtJS yapan şirket tarafından geliştirilen GXT ile gelecek. GWT EXT, ExtJS kütüphanesinde lisans değiştikçe bir şekilde sakat kalır ve böylece GWT EXT'nin gelişimini yavaşlatır.

Genel olarak, GWT / GXT'nin bir web uygulaması geliştirmek için iyi bir çözüm olduğunu düşünüyorum. Aslında geliştirme için barındırılan modu çok seviyorum, işleri hızlı ve kolay hale getiriyor. Ayrıca kodunuzda hata ayıklama avantajına da sahip olursunuz. JUnit ile yapılan birim testler de oldukça sağlam. Bir kurumsal uygulamayı test etmek için yeterince olgun olduğunu düşündüğüm harika bir JavaScript birimi test çerçevesi görmedim.

GWT EXT hakkında daha fazla bilgi için: http://gwt-ext.com/

EXT GWT (GXT) hakkında daha fazla bilgi için: http://extjs.com/products/gxt/


1
Bu soru hala aktif olduğundan ve oy aldığından, bir güncelleme sağlayacağımı düşündüm. SXha Inc'in iş uygulamalarını beğenmediğim için GXT'yi (2009-2010) tamamen terk ettim. Daha sonra GWT'yi bıraktım. Nefret etmek için kullandığım sürece JavaScript kullanarak hayal kurmuştum. Gerçekten anlayana kadar. Şimdi neredeyse sadece Node.js / AngularJS'de gelişiyorum. Bootstrap 3'ü deneyin ve GWT'den çok daha kısa sürede harika görünümlü bir web sitesi yapabilirsiniz. Gelecek JavaScript'tir, ne kadar erken kucaklarsanız o kadar iyi geliştirici olursunuz.
JP Richardson

Şimdi ne düşünüyorsun? (sadece meraklı) Teşekkürler.
Akos Lukacs

1
@AkosLukacs Hala JavaScript kullandığımı ve her parçasını sevdiğimi rapor edebilirim! Dediğim gibi, JavaScript'ten nefret etmek için kullanıyorum ve bu yüzden neden GWT'yi seçtim. Gerçek şu ki, herhangi bir web geliştirme yapacaksanız JavaScript'ten kaçınamayacaksınız, bu yüzden onu kucaklayabilirsiniz. Hemen hemen her şey için JavaScript kullanmaya adapte oldum (Go ile hafif bir dolambaçlı yol aldı). Yığım ilerledikçe, Node.js / Express / React kullanıyorum. Angular'ın büyük bir hayranı olarak kullanıyorum ve oldukça iyi biliyorum, ancak öğrenme eğrisi çok yüksek olduğundan JS ile başlayan herkese Angular 1.x'i öneremem.
JP Richardson

5

Kolayca üstesinden gelemediğim büyük tuzaklar yok. Barındırılan modu yoğun bir şekilde kullanın. GWT-ext'i kullandığınız için, kutudan çıkmış görünümde ince ayar yapmak istemediğiniz sürece neredeyse hiç CSS'ye dokunmanız gerekmeyecek.

Benim tavsiyem, GWT "yerel" widget'ını bir kütüphane üzerinde özellikleri yakın olduğu bir yerde kullanmaktır.

Arama motoru dizine ekleme: evet sitenin normalde gezilebilir URL'leri olmayacaktır (yalnızca normal bir web sitesinin öğelerine widget eklemezseniz). Ancak geçmişe geri / ileri işlevini yapabilirsiniz.


4

Bir süre önce bir projede GWT ve GWT-ext'i birlikte kullandım. Web geliştirme devam ederken deneyimi oldukça pürüzsüz buldum, ama benim tavsiyem şu olurdu:

GWT yerel widget'larını EXT widget'larıyla karıştırmayın. Bu genellikle cehennem gibi kafa karıştırıcıdır, çünkü genellikle isimler aynıdır (GWT.Button veya GWText.Button?)

Kodu gerçekten istediğimden daha karmaşık hale getiren bir şey oldu, a) dinamik olarak güncellenebilir b) ölçeklenebilir bir Panel istedim

GWT yerel panelleri dinamik, Ext panelleri basamaklandırılabilir. Çözüm? Bir GWTExt Panelini saran bir GWT.VerticalPanel ... Kaos. :)

Ama hey, işe yarıyor. ;)


4

Ykagano'dan gelen yorumu ikinci olarak, en büyük dezavantaj MVC'de V'yi kaybetmek. Gerçek ui sınıfını istemci tarafı kodunuzun geri kalanından ayırabilseniz de, bir grafik / web tasarımcısı tarafından oluşturulan bir HTML sayfasını kolayca kullanamazsınız. Bu, HTML'yi java'ya çevirmek için bir geliştiriciye ihtiyacınız olduğu anlamına gelir.

Bir wysiwyg ui editörü alın, size çok zaman kazandıracak. GWTDesigner kullanıyorum.

GWT'nin en büyük tarafı çapraz tarayıcı sorunlarını unutabiliyor. Bu% 100 değil ama neredeyse tüm bu acıyı alır. Barındırılan mod hata ayıklama (mükemmel ama bir java hata ayıklayıcı ile aynı olmayan Firebug yerine) avantajı ile birlikte geliştiriciye karmaşık ajax uygulamaları oluşturmada büyük bir avantaj sağlar.

Oh ve çalışma zamanında hızlı, özellikle bir gzip filtre kullanıyorsanız.


1
Gzip filtresini bilmiyordum - bu çöplük için teşekkürler.
agartzke

4

Biraz konu dışı, ancak irc'deki #gwt kanalı çok yararlı, muhtemelen kalıcı bir sorununuz varsa.


Kanal hangi IRC ağında?
tovare

Freenode üzerindedir (irc.freenode.net). Aslında ## gwt, ancak #gwt yazarsanız yönlendirilirsiniz.
stian

4

GWT oldukça basit ve sezgiseldir.

Özellikle, GWT widget'larının XML'de düzenlenmesine ve daha sonra Java'da kodlanmasına izin vermek için UIBinder'in piyasaya sürülmesi ile.

Dolayısıyla, başka Ajax veya Flash tasarım araçları veya Silverlight vb. Kullandıysanız, GWT'nin öğrenmesi çok kolaydır.

Büyük engel, bir tuzak değilse de, GWT RPC'dir. GWT'yi kullanmak istemenizin nedeni GWT zaman uyumsuz RPC'sidir. Aksi halde, sayfanızı biçimlendirmek için neden yalnızca css'e güvenmiyorsunuz?

GWT RPC, sunucunuzun sayfayı yenilemek zorunda kalmadan sunucunuzdaki verileri yenilemesini sağlayan öğedir. Bu, stok performansının izlenmesi (veya ABD'nin mevcut ulusal ve kamu borcu veya ikinci sırada dünya çapında iptal edilen doğmamış bebek sayısı) gibi sayfalar için mutlak bir gerekliliktir.

GWT RPC'nin anlaşılması biraz çaba gerektiriyor, ancak birkaç saat verildiğinde her şey netleşmeli.

Bunun ötesinde, GWT RPC'yi öğrenmek için biraz çaba harcadıktan sonra, sonunda JSP'leri RPC için hizmet bileşeni olarak kullanamayacağınızı keşfedersiniz, ancak ... Blogumda JSP'yi nasıl kullanacağım hakkında 8 bölümden (sanırım) bir seri var GWT RPC sunucusu. Ancak, sizden yanıt istemediğinizden, yalnızca sorun çıkardığınızdan, blogumun reklamını yapmaktan vazgeçeceğim.

Yani. GWT'yi kullanmak için en kötü barikatların / tuzakların GWT async RPC'yi düzgün bir şekilde nasıl dağıtacağını ve JSP servislerini kullanmasını nasıl sağlayacağını öğrendiğime inanıyorum.


Blog makalelerinize bir bağlantı istiyorum;)
ms-tg

h2g2java.blessedgeek.com
Blessed Geek

3

GWT kod tabanımızı bir web tasarımcısından aldığımız HTML web şablonlarıyla (GWT'nin yönetmesini istediğimiz belirli div kimliğine sahip statik HTML sayfaları) birleştirmek için çok zorlandık. En azından onu kullandığımızda, GWT'nin web sitemizin GWT'de kodlanmamış kısımlarıyla entegre olmasını sağlayamadık. Sonunda çalışıyorduk, ama büyük bir hackti.


3
  • Her servis arabirimi için yazmanız gereken Async arabirimi, GWT derleyicisi tarafından otomatik olarak oluşturulmuş bir şeye benziyor.
  • Derleme süreleri büyük projeler için uzar

Ancak büyük bir Javascript projesi için en iyi seçim


3

GWT 2.4, yukarıda bahsedilen sorunların çoğunu düzeltti ve harika bir widget kütüphanesi, bir JS lib'in sarıcısı değil, tamamen GWT'de yazılmış olan Beta'dan (Ext GWT 3.0.4, GXT) geliyor.

Kalan ağrı:

  • CSS3 seçici desteği eksikliği, bazı durumlarda "literal ()" kullanabilirsiniz.
  • CSS3 ve transitionEnd gibi modern tarayıcı olayları için destek eksikliği .
  • Java Takvim sınıf desteği eksikliği (yıllar sonra).
  • JUnit4 desteği eksikliği (5 yıl ve artmaktadır).
  • Google GWT ekibinden net yol haritası ve sürüm planı eksikliği.

2

GWT 2.4 ile ilgili olarak, GWT'de hata ayıklarken Firefox'u kullanın , krom kullanmaktan çok daha hızlı. Yalnızca firefox kullanıyorsanız, bu satırı project.gwt.xml dosyanıza koymayı düşünün

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

Ayrıca, eclipse kullanıyorsanız, argümanlar -> VM argümanları altına aşağıdakileri ekleyin:

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

Sunucunuzu ve istemcinizi bölebilir ve bağımsız değişkenler altında aşağıdakileri kullanabilirsiniz -> Program bağımsız değişkenleri: -codeServerPort 9997 -startupUrl http: // sunucunuz / proje -noserver

Ayrıca, her değişiklikte sunucunuzu yenilemeyi önlemek için JRebel kullanın http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ Ve işte canlı bir demo http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY


1

Önemli bir sorun, bazen belirli CSS stillerini kullanabilmek için nihayetinde HTML öğesi haline gelen şeye açıkça bir kimlik atamanız gerektiğidir. Örneğin: bir GWT TabPanel yalnızca tabBarItems öğesinin üzerine gelecektir: tabPanel öğesinin tabBar öğesine bir kimlik atandığında ve bu elementId'de:: vurgusu belirlediğinizde.

Başka bir yerde GWT'nin diğer dezavantajları hakkında yazdım , ancak zaten pasif rafların cevabı :).


Selenium kullanarak test yapmayı planlıyorsanız genellikle kimlik atamak kötü bir şey değildir.
Petteri Hietavirta

1

Son zamanlarda GWT üzerinde çok iş yaptım ve bunu söylemek zorundayım ne olduğunu:

  1. CSS stil sadece bazen zor, tam olarak ne olduğunu anlamak için IE'de IE geliştirici aracını ve Firefox'ta kundakçı kullanın ve css'in değiştirilmesi gereken şey hakkında net bir fikir edineceksiniz
  2. Google'ın dizine eklemesini sağlamak için hileler kullanabilirsiniz. Çok ünlü bir site http://examples.roughian.com/ google adresindeki puanlarını kontrol edin. Çok daha az ünlü bir site www.salvin.in (bunu söylemeye direnemedim), kelimelere göre optimize ettim: salvin ana sayfası (bu üç kelime için google'da arama yapın)

GWT-EXT hakkında fazla bir şey bilmiyorum, ama ben de Üçüncü parti kütüphanelerini dahil etmeye gerek olmadığına inanıyorum.

Kararında iyi şanslar :)


1

1

GWT ekibi, geçen yıl GWT 2.7'yi piyasaya sürerek büyük gelişmeler kaydetti. GWT'nin en büyük zayıflığı, GWT 2.6 ve altı sürümlerde derlemenin çok zaman almasıydı. Bu artık gitti GWT, süper hızlı olan ve sadece değişiklikleri derleyen artımlı derleme yapmamıştır.

GWT 2.7 şimdi ( Kaynak ):

  • Artımlı yapılar artık sadece saniyeler içinde
  • Daha kompakt, daha doğru SourceMaps
  • GSS desteği
  • JSInterop
  • Mükemmel JavaScript Performansı
  • Daha Küçük Kod Boyutu

1

Güvenilir gerçekleri elde etmenin en iyi yolu , GWT'de js'yi herhangi bir noktada kullanabileceğinizi hatırlayın, böylece GWT ile mücadele ediyorsanız js kullanmayı düşünün. Günün sonunda GWT js olur, böylece GWT'de js'de yapabileceğiniz her şeyi yapabilirsiniz. Aslında, çoğu GWT projesi js kullanır. Sorun, GWT'nin çok daha karmaşık olmasıdır. Bununla birlikte, bazen ekstra karmaşıklığa değer. gwt anketidir GWT'de js'yi . GWT ile ilgili en büyük sorunlardan biri her zaman uzun bir derleme zamanı olmuştur. Neyse ki, çok hızlı bir şekilde gelişiyor, bu yüzden yakın gelecekte önemli bir sorun olmayacak. Başka bir tuzak, GWT'nin daha karmaşık olması, çünkü Java yolun her adımında kötü kodlayıcılara direnen daha karmaşık bir dildir. Ayrıca, derleme bir katman ekler. Örneğin, js birlikte çalışma özelliği küçük bir kaynak plakası gerektirir. Temel sorun, GWT'nin basit olacak şekilde tasarlanmamış olmasıdır. Son derece karmaşık web uygulamaları için sıfırdan tasarlanmıştır ve tüm topluluk kolay kodlama konusunda sürekli olarak öncelik, performans, kod kalitesi, mimari vb.

GWT 3.0'ın büyük iyileştirmeler getireceğini belirtmek gerekir.


0

RPC hizmet nesnelerini yeniden kullanma.
Uygulama asılı gibi görünen belirtilerle yarış koşullarına neden olur.


Antony bu konuyu biraz açıklayabilir misiniz? Sunucuya bir RPC çağrısı yapıyorum ve istek geri gelene kadar GUI duyarlı olmasını bekliyorum ama askıda gibi görünüyor.
Brett Hannah

0

Tuzaklar 1 karşılaştım. Superdev modunda farklı davranış. Örneğin, Someclass.class.getName () Superdev modunda kesinlikle iyi çalışır ve sınıfın tam adını döndürür. Üretken modda bu çalışmaz.

  1. addWidget (widget) widget'ın removefromparent () yöntemini çağırır

0

GWT bir teknoloji şaheseridir. İstemci ve sunucu programlamayı birleştirerek tutarlı bir uygulama yapar - yazılımın "katmanlamadan" önce nasıl yazıldığını ve nasıl yazılması gerektiğini. Farklı beceri setlerini, ekip üyeleri arasındaki iletişimsizliği ve genel olarak tüm Web Tasarım aşamasını ortadan kaldırır: hem sanatsal hem de programlama. Ve mobil cihazlara en yakın olanıdır, örneğin Android geliştirme. Aslında GWT, yalnızca HTML değil, farklı yerel kullanıcı arayüzleri oluşturmak için tasarlanmıştır. Her ne kadar bu ayrışmayı sağlamak için muazzam bir disiplin gerektirmesine rağmen - iç katmanlarınızı sunum-agnostik tutmak.

Kaçınılması gereken ilk hata, bunu fark etmem dört yıl sürdü, EXT-GWT, GXT ve SmartGWT gibi üçüncü taraf uzantıları kullanmak. Kendi stilinize yatırım yapmak yerine güzel masaüstü araçlarını kullanmaya başlamak çok cazip, ancak nihayet bıkıncaya kadar SmartGWT ile kaç sorun yaşadığımı söyleyemem. Kısacası, belirli (oldukça modası geçmiş) seviyede ayarlanan çekirdek GWT özelliğini dondurur ve daha sonra üzerine inşa eder. Ayrıca, bu keskin masaüstü görünümü ve hissi günümüzde aptalca görünüyor, özellikle mobil cihazlarda durgun performans, ton hata ve uyumluluk özelliklerinden bahsetmiyoruz. Yerel tarayıcı kontrollerine olabildiğince yakın kalmak istiyorsunuz, yani bazı özel boyalı kontroller değil, yerel <select> öğeleri olarak oluşturulan açılır listeler.

Mobil trendler sayesinde tüm UX daha basit ve daha düz hale geliyor, bu nedenle keskin görünümlü bir uygulama için çok fazla şey yapmanız gerekmiyor. "3D" bir görünüm istiyorsanız da, degradeler vardır. CSS3 her şeyi kolaylaştırdı ve GWT onu ham CSS'den farklı olarak zarif bir nesne yönelimli şekilde sarar. Bu yüzden GWT Vitrinde oldukça çirkin barebone kontrollerine bakarak cesaretiniz kırılmasın. GWT ekibi kasıtlı olarak herhangi bir stil sunmadı, çünkü geliştiricinin işi.

Geri kalanı, güzel özlü API'lerle güçlü yazılan Java'da geleneksel tarayıcı programlamadır. Ancak elbette kodunuzun asla unutulmaması tarayıcının içinde çalışır, bu nedenle tüm aramalar eşzamansızdır, örneğin bir döngüde GWT-RPC yöntemlerini çağıramazsınız (bir listeyi doldurmak için), ancak buna geldiyseniz bunları özyinelemeli olarak zincirlemeniz gerekir durum.

GWT-RPC kullanma gibi kendi kendini ilan eden "anti-paternler" vardır. Şimdiye kadar benim için iyi oldu: 10 yıldır. Sadelik çok önemlidir. Bir saniye bile kod zerafeti ve sürdürülebilirliği için bazı marjinal performansı feda etmek düşünmüyorum. bunun yanı sıra, darboğazlarınızın nerede olacağı değil - veritabanında. Tabii müşteriye ne kadar veri gönderdiğinizi düşünün.

Mevcut gadget'ı bulamıyor veya stil oluşturamazsanız - zengin HTML5 öğe kümesini okuyun, her zaman üçüncü taraf bir tane seçebilirsiniz. Popüler bir jQuery FullCalendar ile yaptım. Roket bilimi hiç de değil. Google Haritalar ve Google Grafikler gibi diğer her şeyin yarı resmi GWT sarmalayıcıları vardır.

GWT mükemmel. Yeterince sevgi almamasının tek nedeni, hala sektörü etkileyen erken İnternet uygulayıcılarının Bilgisayar Bilimi ve nesne yönelimli dillerden onları takdir etmemesidir. Sanatsal (Photoshop / WordPress) veya ağ (Perl / Python) arka plana sahiptirler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.