Perangkap GWT Terbesar? [Tutup]


189

Saya berada di awal / tengah proyek yang kami pilih untuk diterapkan menggunakan GWT. Adakah yang mengalami kesulitan besar dalam menggunakan GWT (dan GWT-EXT) yang tidak dapat diatasi? Bagaimana dengan perspektif kinerja?

Beberapa hal yang telah kita lihat / dengar sudah termasuk:

  • Google tidak dapat mengindeks konten
  • CSS dan gaya pada umumnya tampaknya agak serpihan

Mencari umpan balik tambahan tentang barang-barang ini juga. Terima kasih!


4
Akhir-akhir ini saya perhatikan beberapa situs web berbasis GWT tampil dengan benar di hasil pencarian Google saya, meskipun html yang mendasarinya tidak termasuk informasi yang saya cari (contoh.roughian.com memiliki beberapa hasil semacam ini). Tampaknya pengindeks Google harus melakukan rendering javascript cerdas untuk mencari tahu apa yang sebenarnya akan muncul pada halaman setelah semuanya dimuat.
StriplingWarrior

Jawaban:


231

Saya akan mulai dengan mengatakan bahwa saya penggemar berat GWT, tapi ya ada banyak jebakan, tetapi kebanyakan jika tidak semua yang bisa kami atasi:

Masalah: Waktu kompilasi yang lama, seiring proyek Anda tumbuh, demikian juga jumlah waktu yang dibutuhkan untuk mengkompilasinya. Saya pernah mendengar tentang laporan kompilasi 20 menit, tetapi rata-rata laporan saya sekitar 1 menit.

Solusi: Pisahkan kode Anda ke dalam modul terpisah, dan beri tahu semut untuk hanya membangunnya ketika diubah. Juga saat mengembangkan, Anda dapat mempercepat waktu kompilasi secara besar-besaran hanya dengan membangun untuk satu browser. Anda dapat melakukan ini dengan memasukkan ini ke file .gwt.xml Anda:

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

Di mana gecko1_8 adalah Firefox 2+, ie6 adalah IE, dll.


Masalah: Mode yang dihosting sangat lambat (setidaknya pada OS X) dan tidak cocok dengan perubahan 'hidup' yang Anda dapatkan ketika Anda mengedit hal-hal seperti JSP atau halaman Rails dan tekan refresh di browser Anda.

Larutan: Anda dapat memberikan memori lebih banyak kepada mode yang dihosting (biasanya saya dapatkan untuk 512M) tetapi masih lambat, saya telah menemukan begitu Anda mendapatkan cukup baik dengan GWT Anda berhenti menggunakan ini. Anda membuat banyak perubahan, kemudian kompilasi hanya untuk satu browser (umumnya kompilasi bernilai 20-an) dan kemudian tekan refresh di browser Anda.

Pembaruan: Dengan GWT 2.0+ ini tidak lagi menjadi masalah, karena Anda menggunakan 'Mode Pengembangan' yang baru. Ini pada dasarnya berarti Anda dapat menjalankan kode langsung di browser pilihan Anda, jadi tidak ada kehilangan kecepatan, plus Anda dapat firebug / memeriksanya, dll.

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


Masalah: Kode GWT adalah java, dan memiliki mentalitas yang berbeda untuk meletakkan halaman HTML, yang membuat mengambil desain HTML dan mengubahnya menjadi GWT lebih sulit

Solusi: Sekali lagi Anda terbiasa dengan hal ini, tetapi sayangnya mengubah desain HTML ke desain GWT selalu akan lebih lambat daripada melakukan sesuatu seperti mengubah desain HTML ke halaman JSP.


Masalah: GWT membutuhkan sedikit perhatian, dan belum menjadi arus utama. Berarti sebagian besar pengembang yang bergabung dengan tim Anda atau mengelola kode Anda harus mempelajarinya dari awal

Solusi: Masih harus dilihat apakah GWT akan lepas landas, tetapi jika Anda adalah perusahaan yang mengendalikan siapa yang Anda pekerjakan, maka Anda selalu dapat memilih orang yang mengetahui GWT atau ingin mempelajarinya.


Masalah: GWT adalah palu dibandingkan dengan sesuatu seperti jquery atau javascript biasa. Dibutuhkan lebih banyak pengaturan untuk mewujudkannya daripada hanya menyertakan file JS.

Solusi: Gunakan perpustakaan seperti jquery untuk tugas-tugas kecil dan sederhana yang cocok untuk itu. Gunakan GWT ketika Anda ingin membangun sesuatu yang benar-benar kompleks di AJAX, atau di mana Anda harus meneruskan data Anda bolak-balik melalui mekanisme RPC.


Masalah: Terkadang untuk mengisi halaman GWT Anda, Anda harus melakukan panggilan server saat halaman pertama kali dimuat. Mungkin menyebalkan bagi pengguna untuk duduk di sana dan menonton simbol pemuatan saat Anda mengambil data yang Anda butuhkan.

Solusi: Dalam hal halaman JSP, halaman Anda sudah dirender oleh server sebelum menjadi HTML, jadi Anda benar-benar dapat melakukan semua panggilan GWT saat itu, dan pra-memuatnya ke halaman, untuk pemuatan instan. Lihat di sini untuk detail:

Mempercepat Pemuatan Halaman dengan melakukan pra-serialisasi panggilan GWT Anda


Saya tidak pernah punya masalah CSS mendesain widget saya, di luar kotak, custom atau lainnya, jadi saya tidak tahu apa yang Anda maksud dengan menjadi perangkap?

Mengenai kinerja, saya selalu menemukan bahwa kode GWT yang dikompilasi cepat, dan panggilan AJAX hampir selalu lebih kecil daripada melakukan seluruh halaman refresh, tapi itu tidak benar-benar unik untuk GWT, meskipun paket RPC asli yang Anda dapatkan jika Anda menggunakan bagian belakang JAVA cukup ringkas.


1
Kami telah mengalami beberapa masalah di mana berbagai gaya / perintah penentuan posisi tampaknya tidak "mengambil" - gaya tidak digunakan di tempat yang seharusnya, atau ukuran elemen yang tampaknya mengabaikan permintaan untuk menjadikannya 100%. Sama seperti banyak tantangan CSS biasa - sangat mungkin banyak kesalahan pengguna!
agartzke

@agartzke ya itu CSS untuk Anda, dan sebagian besar tidak ada hubungannya dengan GWT. Itu sebabnya kami mempekerjakan desainer yang sangat terampil untuk melakukan hal semacam itu untuk kami. Melakukannya dengan benar di 4 browser berbeda bukanlah tugas yang mudah.
rustyshelf

1
Ada banyak fitur baru yang menarik datang akhir tahun ini yang sangat meningkatkan banyak masalah ini. Hosted Mode (OOPHM) di luar proses, CssResource (obsesi / minifikasi stylesheet), UiBinder (alias 'Deklaratif UI').
Mark Renouf

Saya melihat ke depan ke 2.0 tetapi saya harus tidak setuju dengan GWT menjadi palu godam. Jika itu masalahnya maka jQuery dan JavaScript adalah cludge, paling-paling. Maksud saya adalah bahwa saya tidak dapat digunakan kembali, saya akhirnya menyalin banyak hal (misalnya: kotak teks pada 4 halaman yang berperilaku identik di setiap tempat). Itu tidak berarti Anda harus membuang semua aplikasi lama Anda. Saya (hampir) tidak akan pernah menggunakan GWT untuk menambah kemampuan ke aplikasi html / js yang ada. Juga Sumber Daya CSS ada di inkubator dan saya menyukainya: stackoverflow.com/questions/1066250/gwt-html-file-with-css/… .
Chris Ruffalo

2
Anda dapat menggunakan kembali JQuery seperti halnya Anda dapat menggunakan kembali GWT, saya tidak berpikir itu argumen yang valid. Keduanya mendukung warisan, dan kemudian keduanya dapat dikemas untuk digunakan kembali (file .jar untuk GWT, file .js untuk JQuery). Saya mendukung apa yang saya katakan GWT adalah palu godam, Anda harus kode di Jawa, Anda harus mengkompilasinya, Anda memiliki lebih banyak hal untuk dikelola. Jika Anda ingin memecahkan dinding bata, pilihlah palu godam. Ini bukan kritik tapi itu poin yang valid. Alat yang tepat untuk pekerjaan yang tepat.
rustyshelf

54

Kami telah bekerja dengan gwt selama hampir 2 tahun. Kami telah belajar banyak pelajaran. Inilah yang kami pikirkan:

  1. Jangan gunakan perpustakaan widget pihak ketiga terutama gwt-ext. Ini akan mematikan kinerja debugging, pengembangan, dan runtime Anda. Jika Anda memiliki pertanyaan tentang bagaimana ini terjadi, hubungi saya langsung.

  2. Gunakan gwt untuk hanya mengisi bagian dinamis dari aplikasi Anda. Jadi jika Anda memiliki beberapa interaksi pengguna yang kompleks dengan banyak bidang. Namun, jangan gunakan panel yang menyertainya. Ambil halaman yang disediakan perancang stok yang ada. Buat area yang akan berisi kontrol untuk aplikasi Anda. Lampirkan kontrol ini ke halaman dalam onModuleLoad (). Dengan cara ini Anda dapat menggunakan halaman standar dari desainer Anda dan juga melakukan semua gaya di luar gwt.

  3. Jangan membangun seluruh aplikasi sebagai satu halaman standar yang kemudian secara dinamis membangun semua bagian. Jika Anda melakukan apa yang saya sarankan pada item 2, ini tidak akan terjadi. Jika Anda membangun semuanya secara dinamis, Anda akan mematikan kinerja dan menghabiskan banyak memori untuk aplikasi menengah hingga besar. Juga, jika Anda melakukan apa yang saya sarankan, tombol kembali akan bekerja dengan baik, sehingga akan mengindeks mesin pencari dll.

Komentator lain juga punya beberapa saran bagus. Aturan praktis yang saya gunakan adalah membuat halaman seperti Anda melakukan halaman web standar. Kemudian mengukir potongan-potongan yang perlu dinamis. Gantilah dengan elemen yang memiliki id lalu gunakan RootPanel.get( id ).add( widget )untuk mengisi area tersebut.


Saya membuka pertanyaan tentang jawaban Anda di stackoverflow.com/q/10025656/138585 . Saya akan menghargai jika Anda dapat melihatnya.
Elad

20

Perangkap yang kami temui:

  • Meskipun Anda bisa mendapatkan banyak jarak tempuh dari menggunakan sesuatu seperti GWT EXT, setiap kali Anda menggunakan veneer tipis semacam ini di atas pustaka JavaScript, Anda kehilangan kemampuan untuk debug. Lebih dari sekali saya telah memukul kepala saya di atas meja karena saya tidak dapat memeriksa (di dalam debugger IntelliJ saya) apa yang terjadi di kelas tabel GWT EXT ... Yang dapat Anda lihat hanyalah bahwa itu adalah JavaScriptObject. Ini membuatnya cukup sulit untuk mencari tahu apa yang salah ...

  • Tidak memiliki seseorang di tim Anda yang tahu CSS. Dari pengalaman saya, tidak masalah bahwa orang itu bukan ahli ... itu cukup bahwa ia memiliki pengetahuan kerja yang baik, dan tahu istilah yang tepat untuk google saat diperlukan.

  • Melakukan debugging di seluruh browser. Mengawasi Mode Hosted yang Keluar dari Proses [ 1 ] [ 2 ] [ 3 ], semoga hadir di GWT 1.6 ... Untuk saat ini, Anda hanya perlu mendapatkan hal-hal yang baik dengan mode yang dihosting, kemudian gunakan tombol "Kompilasi / Jelajahi" , tempat Anda dapat bermain dengan browser lain. Bagi saya, bekerja di Windows, ini berarti saya dapat melihat pekerjaan saya di FireFox, dan menggunakan FireBug untuk membantu mengubah dan membuat segalanya lebih baik.

  • IE6. Sungguh menakjubkan betapa berbedanya IE 6 akan membuat hal-hal. Saya telah mengambil pendekatan menerapkan gaya ke "viewport" terluar menurut browser sehingga saya dapat memiliki aturan CSS seperti:

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

Akhirnya, pastikan Anda menggunakan editor yang membantu Anda. Saya menggunakan IntelliJ - ada banyak kecerdasan GWT. Misalnya, jika saya mencoba menggunakan kelas yang tidak ditangani oleh emulasi JRE, itu membuat saya tahu; jika saya menentukan gaya untuk widget, dan saya belum menentukan gaya itu, kodenya akan sedikit merah berlekuk-lekuk ... Atau, ketika melihat CSS, itu akan memberi tahu saya ketika saya telah menentukan atribut yang saling bertentangan dalam sebuah aturan tunggal. (Saya belum mencobanya, tetapi saya mengerti bahwa versi 8 memiliki dukungan GWT yang lebih baik, seperti menjaga antarmuka dan implementasi RPC "lokal" dan "async" tersinkronisasi.)


18

GWT 2.0, yang seharusnya keluar dalam beberapa bulan mendatang, memecahkan banyak masalah yang dibahas.

  • Buat tata letak menggunakan html / xml seperti sintaks
  • Memuat Script Dinamis - hanya JS esensial yang akan diunduh pada awalnya. Sisanya akan diunduh sesuai kebutuhan
  • In-Browser Hosted Mode - Ini mungkin menangani masalah kecepatan mode host yang dibahas, di antara manfaat lainnya
  • "Optimalisasi Kompiler" - Kompilasi lebih cepat, semoga

GWT 2.0 Pratinjau Video di Google I / O


15

Bukan "tidak dapat diatasi" tetapi sedikit rasa sakit untuk sesuatu yang mendasar.

Penanganan tanggal:

GWT menggunakan yang usang java.util.Dateyang dapat menyebabkan perilaku yang tidak terduga ketika berhadapan dengan tanggal di sisi klien. java.util.Calendartidak didukung oleh GWT. Info lebih lanjut di sini .

Contoh masalah terkait:


1
Dua tahun kemudian, dan ini masih terjadi. Tetap cukup menjengkelkan untuk melakukan matematika tanggal pada klien.
Joseph Lust

Masalahnya adalah terjemahan (kompilasi) dari java.util.Calendarke JavaScript. Anda juga dapat melihat kelas GWTCalendarUtil , Bagaimana cara menggunakan java.util.Calendar di GWT dan Bagaimana melakukan operasi kalender di Java GWT? Bagaimana cara menambahkan hari ke Tanggal? . Cheers;)
olibre

10

Saya akan menambahkan beberapa poin ke yang sudah disebutkan:

  • Penyatuan data / validasi. GWT tidak memiliki dukungan penyatuan data / validasi, meskipun ada beberapa proyek di bidang ini mulai muncul. Anda akan menemukan diri Anda menulis banyak ini:
TextField fname, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Pemuatan malas. Karena gwt ada di sisi klien, pemuatan malas sebenarnya bukan pilihan. Anda harus merancang RPC dan Objek Domain dengan cermat untuk melakukannya
    • kirim semua data objek Anda yang diperlukan
    • menghindari keinginan mengambil semua data Anda
    • Anda juga harus memastikan bahwa Anda tidak akan mengirim proxy / objek non serializable. hibernate4gwt dapat membantu Anda dengan poin-poin ini.
  • Desain UI. Lebih sulit untuk memvisualisasikan UI di java (Panel, Tombol, dll) daripada di html.
  • Dukungan sejarah. GWT tidak dikirimkan dengan subsistem Riwayat, juga tidak dikirimkan dengan subsistem apa pun untuk url yang bagus atau bookmark yang lengkap. Anda harus memutar sendiri (meskipun memiliki dukungan untuk token Sejarah, yang merupakan awal). Ini terjadi dengan semua toolkit AJAX AFAIK.

IMHO, GWT tidak memiliki kerangka kerja yang memiliki dukungan di luar kotak untuk semua masalah yang disebutkan di 'utas' ini.


GWT melakukan pengiriman dengan sistem riwayat, mis. History.newItem ("myItem", false); akan memasukkan #myItem di url, untuk memudahkan bookmark. Untuk menangani seseorang yang memuat bookmark dengan aplikasi Anda, cukup gunakan History.addValueChangeHandler (myHandlerMethod);
Ztranger

Ini bukan sistem riwayat, itu hanya mekanisme untuk menulis token ke URL dan menangani notifikasi perubahan token. Anda masih harus menulis semua kode aplikasi untuk menangani perubahan riwayat.
Miguel Ping

9

Saya sedang mengerjakan proyek saat ini yang menggunakan EXT GWT (GXT) agar tidak menjadi bingung dengan GWT EXT. Ada perbedaan, EXT GWT adalah salah satu yang sebenarnya diproduksi oleh perusahaan yang menulis ExtJS perpustakaan javascript. GWT EXT adalah pembungkus GWT di sekitar perpustakaan ExtJS. GXT adalah GWT asli.

Bagaimanapun, GXT masih agak belum matang dan tidak memiliki komunitas yang solid yang saya rasa dimiliki oleh GWT EXT. Namun, masa depan adalah dengan GXT, karena itu asli GWT dan sebenarnya dikembangkan oleh perusahaan yang membuat ExtJS. GWT EXT agak lumpuh karena lisensi diubah pada perpustakaan ExtJS, sehingga memperlambat pengembangan GWT EXT.

Secara keseluruhan, saya pikir GWT / GXT adalah solusi yang baik untuk mengembangkan aplikasi web. Saya sebenarnya cukup menyukai mode yang di-host untuk pengembangan, itu membuat semuanya cepat dan mudah. Anda juga mendapatkan manfaat karena dapat men-debug kode Anda juga. Pengujian unit dengan JUnit juga cukup solid. Saya belum melihat kerangka pengujian unit JavaScript yang saya rasa cukup matang untuk menguji aplikasi perusahaan.

Untuk informasi lebih lanjut tentang GWT EXT: http://gwt-ext.com/

Untuk informasi lebih lanjut tentang EXT GWT (GXT): http://extjs.com/products/gxt/


1
Karena pertanyaan ini masih aktif dan mendapatkan suara, saya pikir saya akan memberikan pembaruan. Saya benar-benar membuang GXT (2009-2010) karena saya tidak suka praktik bisnis Sencha Inc. Saya kemudian membuang GWT. Saya takut menggunakan JavaScript selama saya gunakan untuk membencinya. Begitulah, sampai saya benar-benar memahaminya. Sekarang saya hampir secara eksklusif berkembang di Node.js / AngularJS. Aduk di Bootstrap 3 dan Anda dapat membuat situs web yang tampak keren dalam waktu yang jauh lebih singkat daripada GWT. Masa depan adalah JavaScript, semakin awal Anda merangkulnya, semakin baik pengembangnya.
JP Richardson

Apa pendapat Anda sekarang? (hanya ingin tahu) Terima kasih.
Akos Lukacs

1
@AkosLukacs Saya masih dapat melaporkan bahwa saya menggunakan JavaScript dan sangat menyukainya! Seperti yang saya katakan, saya gunakan untuk BENCI JavaScript dan karenanya saya memilih GWT. Kenyataannya adalah bahwa Anda tidak akan dapat menghindari JavaScript jika Anda akan melakukan pengembangan web apa pun, jadi sebaiknya Anda merangkulnya. Saya sudah cukup banyak beradaptasi menggunakan JavaScript untuk semuanya (mengambil jalan memutar sedikit dengan Go). Sejauh stack saya berjalan, saya menggunakan Node.js / Express / React. Saya dulu penggemar berat Angular dan mengetahuinya dengan cukup baik, tetapi saya tidak bisa merekomendasikan Angular 1.x kepada siapa pun yang memulai dengan JS karena kurva belajarnya terlalu tinggi.
JP Richardson

5

Tidak ada jebakan besar yang belum bisa saya atasi dengan mudah. Gunakan mode yang di-host dengan berat. Saat Anda menggunakan GWT-ext, Anda hampir tidak perlu menyentuh CSS sendiri kecuali Anda ingin mengubah tampilan kotak.

Rekomendasi saya adalah menggunakan widget "asli" GWT di atas pustaka yang memiliki fitur yang hampir sama.

Pengindeksan ulang mesin pencari: ya situs tidak akan memiliki URL yang dapat dinavigasi secara normal (kecuali Anda hanya menambahkan widget ke elemen situs web biasa). Anda dapat melakukan fungsi back / forward history.


4

Saya menggunakan GWT dan GWT-ext bersama pada suatu proyek beberapa waktu lalu. Saya menemukan pengalaman yang cukup lancar seiring perkembangan web, tetapi saran saya adalah ini:

Jangan gabungkan widget asli GWT dengan widget EXT. Sangat membingungkan, karena biasanya namanya sama (GWT.Button atau GWText.Button?)

Satu hal yang terjadi pada saya yang benar-benar membuat kode lebih kompleks dari yang saya inginkan, adalah saya menginginkan Panel yang a) secara dinamis dapat diupdate b) cascadable

Panel asli GWT bersifat dinamis, panel Ext dapat di-cascadable. Larutan? GWT.VerticalPanel yang membungkus Panel GWTExt ... Kekacauan. :)

Tapi hei, itu berhasil. ;)


4

Saya kedua komentar dari ykagano, kerugian terbesar adalah kehilangan V di MVC. Meskipun Anda dapat memisahkan kelas ui sebenarnya dari sisa kode sisi klien Anda, Anda tidak dapat dengan mudah menggunakan halaman HTML yang dihasilkan oleh desainer grafis / web. Ini berarti Anda memerlukan pengembang untuk menerjemahkan HTML ke java.

Dapatkan editor ui wwywyg, ini akan menghemat banyak waktu. Saya menggunakan GWTDesigner.

Sisi positif terbesar dari GWT adalah bisa melupakan masalah lintas browser. Ini bukan 100% tetapi menghilangkan hampir semua rasa sakit itu. Dikombinasikan dengan manfaat dari debugging mode yang dihosting (sebagai lawan Firebug yang sangat baik tetapi tidak sama dengan debugger java) itu memberikan pengembang keuntungan besar dalam menghasilkan aplikasi ajax yang kompleks.

Oh dan itu cepat saat runtime, terutama jika Anda menggunakan filter gzip.


1
Tidak tahu tentang filter gzip - terima kasih atas berita gembira itu.
agartzke

4

Agak di luar topik, tetapi saluran #gwt di irc sangat membantu, jika Anda memiliki masalah terus-menerus.


di mana jaringan IRC saluran?
tovare

Ada di freenode (irc.freenode.net). Dan ini sebenarnya ## gwt, tetapi Anda akan diteruskan ke sana jika Anda mengetik #gwt.
stian

4

GWT cukup mudah dan intuitif.

Terutama dengan dirilisnya UIBinder untuk memungkinkan widget GWT diletakkan dalam XML dan kemudian diberi kode-belakang di Jawa.

Jadi jika Anda telah menggunakan alat desain Ajax atau Flash lainnya, atau Silverlight, dll, GWT sangat mudah dipelajari.

Rintangan utama, jika bukan jebakan, adalah GWT RPC. Alasan utama Anda ingin menggunakan GWT adalah karena GWT async RPC. Kalau tidak, mengapa tidak hanya mengandalkan css untuk memformat halaman Anda?

GWT RPC adalah elemen yang memungkinkan server Anda untuk me-refresh data di server Anda tanpa harus me-refresh halaman. Ini merupakan persyaratan mutlak untuk laman seperti pemantauan kinerja stok (atau utang nasional dan publik AS saat ini atau jumlah bayi yang belum lahir yang dibatalkan di seluruh dunia pada detik).

GWT RPC membutuhkan beberapa upaya untuk memahami tetapi diberikan beberapa jam, itu akan menjadi jelas.

Di atas itu, setelah berupaya mempelajari GWT RPC, Anda akhirnya menemukan bahwa Anda tidak dapat menggunakan JSP sebagai komponen layanan untuk RPC, kecuali ... Saya memiliki seri 8 bagian (menurut saya) di blog saya tentang cara menggunakan JSP sebagai servicer GWT RPC. Namun, karena Anda tidak meminta jawaban tetapi hanya masalah, saya akan berhenti mengiklankan blog saya.

Begitu. Saya sangat percaya bahwa penghalang / perangkap terburuk untuk menggunakan GWT adalah mencari tahu cara menggunakan GWT async RPC dengan benar dan cara mengaktifkannya untuk menggunakan servicers JSP.


Saya ingin tautan ke artikel blog Anda;)
ms-tg

h2g2java.blessedgeek.com
Blessed Geek

3

Kami mengalami kesulitan untuk menggabungkan basis kode GWT kami dengan templat web HTML yang kami peroleh dari perancang web (laman HTML statis dengan id khusus yang ingin kami kelola oleh GWT). Setidaknya ketika kami menggunakannya, kami tidak bisa membuat GWT terintegrasi dengan bagian-bagian situs web kami yang tidak dikodekan dalam GWT. Kami berhasil pada akhirnya, tetapi itu adalah retasan besar.


3
  • Antarmuka Async yang harus Anda tulis untuk setiap antarmuka layanan terlihat seperti sesuatu yang bisa dihasilkan secara otomatis oleh kompiler GWT.
  • Waktu kompilasi menjadi panjang untuk proyek-proyek besar

Tetapi untuk proyek Javascript besar itu pilihan terbaik


3

GWT 2.4 telah memperbaiki banyak masalah yang disebutkan di atas dan perpustakaan widget yang hebat baru saja keluar dari Beta (Ext GWT 3.0.4 alias GXT), yang ditulis sepenuhnya dalam GWT, bukan pembungkus lib JS.

Rasa sakit yang tersisa:

  • Kurangnya dukungan pemilih CSS3, Anda dapat menggunakan "literal ()" dalam beberapa kasus untuk menyiasatinya.
  • Kurangnya dukungan untuk CSS3 dan acara browser modern seperti transisi .
  • Kurangnya dukungan kelas Kalender Java (bertahun-tahun kemudian).
  • Kurangnya dukungan JUnit4 (5 tahun dan terus bertambah).
  • Kurangnya peta jalan yang jelas dan jadwal rilis dari tim Google GWT.

2

Mengenai GWT 2.4, Gunakan Firefox saat men-debug GWT, itu jauh lebih cepat daripada menggunakan chrome. Dan jika Anda hanya akan menggunakan firefox, pertimbangkan untuk meletakkan baris ini di file project.gwt.xml Anda

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

Juga, Jika Anda menggunakan gerhana, tambahkan argumen berikut di bawah ini -> Argumen VM:

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

Anda dapat membagi server dan klien Anda, dan menggunakan argumen berikut di bawah ini -> Argumen program: -codeServerPort 9997 -startupUrl http: // server Anda / proyek -noserver

Juga, untuk mencegah penyegaran server Anda pada setiap perubahan, gunakan JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ Dan inilah demo langsung http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY


1

Salah satu perangkap utama adalah bahwa kadang-kadang Anda perlu secara eksplisit menetapkan id untuk apa yang akhirnya menjadi elemen HTML untuk dapat menggunakan gaya CSS tertentu. Sebagai contoh: GWT TabPanel hanya akan melakukan: arahkan kursor ke tabBarItems ketika tabBar dari tabPanel telah diberi id dan Anda menentukan: hover pada elementId itu.

Saya menulis tentang beberapa kelemahan lain dari GWT di tempat lain, tetapi mereka sudah dicakup oleh jawaban rustyshelfs :).


Umumnya menetapkan ID bukanlah hal yang buruk jika Anda berencana untuk melakukan tes menggunakan Selenium.
Petteri Hietavirta

1

Saya telah melakukan banyak pekerjaan di GWT baru-baru ini, dan inilah yang harus saya katakan:

  1. Gaya CSS terkadang hanya rumit, gunakan alat pengembang IE di IE dan pembakar di Firefox untuk mencari tahu apa yang sebenarnya terjadi dan Anda akan mendapatkan ide yang jelas tentang apa yang perlu diubah css
  2. Anda dapat menggunakan trik untuk membuat google mengindeksnya. Situs yang sangat terkenal adalah http://examples.roughian.com/ periksa peringkatnya di google. Situs yang jauh kurang terkenal adalah www.salvin.in (tidak bisa menolak untuk menyebutkannya), saya mengoptimalkannya dengan kata-kata: salvin home page (cari google untuk tiga kata ini)

Saya tidak tahu banyak tentang GWT-EXT, tetapi saya juga yakin bahwa tidak perlu menyertakan perpustakaan pihak ketiga.

Semoga sukses dengan keputusan Anda :)


1

1

Tim GWT membuat banyak perbaikan besar untuk tahun lalu merilis GWT 2.7. Salah satu kelemahan utama GWT adalah kompilasi membutuhkan banyak waktu di GWT 2.6 dan di bawahnya. Ini sekarang hilang GWT belum kompilasi tambahan yang super cepat dan hanya mengkompilasi perubahan.

GWT 2.7 sekarang memiliki ( Sumber ):

  • Build tambahan sekarang hanya beberapa detik
  • SourceMaps lebih kompak, lebih akurat
  • Dukungan GSS
  • JSInterop
  • Kinerja JavaScript Luar Biasa
  • Ukuran Kode Lebih Kecil

1

Cara terbaik untuk mendapatkan fakta yang andal adalah dari survei gwt . Salah satu masalah terbesar dengan GWT adalah waktu kompilasi yang lama. Untungnya, itu berkembang sangat cepat sehingga tidak akan menjadi masalah yang signifikan dalam waktu dekat. Perangkap lain adalah bahwa GWT secara dramatis lebih rumit karena Java adalah bahasa yang lebih rumit yang menolak coders buruk di setiap langkah. Selain itu, kompilasi menambahkan lapisan. Sebagai contoh, js interop membutuhkan sedikit boilerplate. Masalah mendasarnya adalah bahwa GWT tidak dirancang untuk menjadi sederhana. Ini dirancang dari bawah ke atas untuk aplikasi web yang sangat rumit dan seluruh komunitas secara konsisten memprioritaskan, kinerja, kualitas kode, arsitektur, dan sebagainya daripada pengkodean yang mudah.
Ingatlah bahwa Anda dapat menggunakan js di GWT kapan saja jadi jika Anda kesulitan dengan GWT pertimbangkan untuk menggunakan js. Pada akhirnya GWT adalah js sehingga Anda dapat melakukan apa saja di GWT yang dapat Anda lakukan di js. Bahkan, sebagian besar proyek GWT menggunakan js. Masalahnya adalah bahwa GWT secara drastis lebih rumit. Namun demikian, terkadang sebanding dengan kompleksitas ekstra.

Perlu dicatat bahwa GWT 3.0 akan membawa perbaikan besar-besaran.


0

Menggunakan kembali objek layanan RPC.
Ini menyebabkan kondisi balapan dengan gejala yang terlihat seperti menggantung aplikasi.


Antony dapat Anda menguraikan ini. Saya membuat panggilan RPC ke server dan saya mengharapkan GUI responsif sampai permintaan kembali tetapi tampaknya hang.
Brett Hannah

0

Perangkap saya berlari ke 1. Perilaku yang berbeda dalam mode superdev. Misalnya Someclass.class.getName () berfungsi dengan sangat baik dalam mode Superdev dan mengembalikan nama kelas yang memenuhi syarat. Dalam mode produktif ini tidak berfungsi.

  1. addWidget (widget) akan memanggil removefromparent widget ()

0

GWT adalah mahakarya teknologi. Ini menyatukan klien dan pemrograman server menjadikannya satu aplikasi yang koheren - cara perangkat lunak ditulis sebelum "layering", dan cara itu harus ditulis. Ini menghilangkan berbagai keahlian, miskomunikasi antara anggota tim, dan umumnya seluruh fase Desain Web: baik artistik dan pemrograman. Dan itu adalah yang terdekat dengan ponsel Anda misalnya pengembangan Android. Sebenarnya GWT dirancang untuk menghasilkan UI asli yang berbeda, bukan hanya HTML. Meskipun itu membutuhkan disiplin yang sangat besar untuk memastikan pemisahan seperti itu - untuk menjaga presentasi lapisan dalam Anda - agnostik.

Kesalahan pertama yang harus Anda hindari, yang membutuhkan waktu empat tahun untuk saya sadari, adalah menggunakan ekstensi pihak ketiga seperti EXT-GWT alias GXT dan SmartGWT. Sangat menggoda untuk mulai menggunakan widget desktopish cantik mereka daripada berinvestasi dalam gaya Anda sendiri, tetapi saya tidak bisa mengatakan berapa banyak masalah yang saya miliki dengan SmartGWT sampai akhirnya saya bosan. Singkatnya itu membekukan fitur inti GWT yang ditetapkan pada tingkat (cukup usang) tertentu dan kemudian membangun di atasnya. Juga perlu diingat, tampilan dan nuansa desktop yang dipahat terlihat konyol saat ini, belum lagi kinerja yang lamban, berton-ton bug, dan fitur kompatibilitas - terutama pada perangkat mobile. Anda ingin tetap sedekat mungkin dengan kontrol peramban asli, sedapat mungkin yaitu dropdown yang diberikan sebagai elemen <select> asli, bukan beberapa kontrol yang dicat khusus.

Berkat tren seluler, seluruh UX menjadi lebih sederhana dan lebih datar, sehingga Anda tidak perlu berbuat banyak untuk merancang aplikasi yang tampak tajam. Meskipun jika Anda ingin tampilan "3D", ada juga gradien. CSS3 membuat segalanya mudah, dan GWT membungkusnya dengan cara berorientasi objek yang elegan tidak seperti CSS mentah. Jadi jangan berkecil hati dengan melihat kontrol barebone yang agak jelek di GWT Showcase. Tim GWT sengaja tidak menawarkan gaya apa pun, karena itu adalah pekerjaan pengembang.

Sisanya cukup banyak pemrograman browser konvensional di Jawa sangat diketik dengan API ringkas yang indah. Tapi tentu saja jangan pernah lupa kode Anda berjalan di dalam browser, jadi semua panggilan tidak sinkron, misalnya Anda tidak dapat memanggil metode GWT-RPC dalam satu lingkaran (untuk mengisi beberapa daftar), tetapi perlu secara rekursif memutarnya jika Anda datang ke ini situasi.

Ada beberapa "anti-pola" yang diproklamirkan sendiri seperti tidak menggunakan GWT-RPC. Sejauh ini sudah baik bagi saya: selama 10 tahun. Kesederhanaan adalah kuncinya. Saya tidak akan berpikir sedetik pun untuk mengorbankan beberapa kinerja marjinal untuk keanggunan kode dan pemeliharaan. selain itu ini bukan tempat kemacetan Anda - dalam database. Tentu saja keberatan berapa banyak data yang Anda kirim ke klien.

Dan jika Anda tidak dapat menemukan atau menata gadget yang ada - baca kumpulan elemen HTML5 yang kaya, Anda selalu dapat membungkus yang pihak ketiga. Saya melakukannya dengan FullCalendar jQuery yang populer. Bukan ilmu roket sama sekali. Segala sesuatu yang lain seperti Google Maps dan Google Charts memiliki pembungkus GWT semi resmi.

GWT sempurna. Satu-satunya alasan itu tidak mendapatkan cukup cinta adalah karena pengadopsi Internet awal yang masih mempengaruhi industri tidak datang dari Ilmu Komputer dan bahasa berorientasi objek untuk menghargai mereka. Mereka memiliki latar belakang artistik (Photoshop / WordPress) atau jaringan (Perl / Python).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.