Apa keunggulan alat yang terbukti seperti GWT dibandingkan kerangka kerja JavaScript murni?

11

GWT adalah tumpukan perangkat lunak yang menerjemahkan kode Java dan sub-set perpustakaan kelas Java Runtime ke kode JavaScript.

Dibandingkan dengan JavaScript toolkit, GWT bisa tampak mengasingkan, secara alami dan oleh penggunaan, dan terlalu rumit untuk melakukan hal-hal yang bahkan sederhana, menghilangkan banyak kontrol berbutir halus yang Anda miliki dengan menggunakan JavaScript secara langsung.

Mengapa pengembang web memilih untuk menggunakan alat seperti GWT, yang menggunakan bahasa yang awalnya tidak ditargetkan untuk web, alih-alih menggunakan JavaScript murni dan kerangka kerja dan toolkit JavaScript?

Apakah ini terukur lebih baik, dan berdasarkan kriteria apa?

Sourav Majumder
sumber

Jawaban:

27

Termasuk Baterai

Tooling Java

Ini luar biasa:

  • IDE: walaupun beberapa IDE mendukung JavaScript, level dukungan tidak bisa dibandingkan. Cobalah untuk memperbaiki kode JavaScript pada basis kode besar (katakanlah, 40K + LOC) dan menangis.
  • Unit-Testing: meskipun itu meningkat selama beberapa tahun terakhir, itu juga jauh lebih matang di dunia Jawa.
  • Integrasi dan Inspeksi Berkesinambungan
  • Generasi Dokumentasi: Tentu Anda memiliki JSDoc dan beberapa lainnya

Pengetikan statis

Ini menangkap bug lebih awal. (Alamat Google Penutupan yang sedikit sambil menjaga pengembang di dunia JavaScript, jika Anda suka).

JavaScript yang Dioptimalkan

GWT menulis JavaScript lebih cepat dan lebih ringkas daripada Anda (untuk aplikasi besar), dan memungkinkan Anda untuk menentukan apa yang dikirim ke klien dengan lebih mudah daripada dengan solusi JS penuh yang setara.

Arsitektur

Ini memberikan pemisahan keprihatinan yang baik untuk aplikasi besar, dengan arsitektur MVC atau MVP yang layak sudah disiapkan sebelumnya di ujung jari Anda.

Perpustakaan yang Layak

GWT menyediakan perpustakaan yang menarik, dan membuatnya mudah (yah, lebih mudah) untuk membangun aplikasi yang diaktifkan I18N dengan pemuatan bundel dinamis.

Unit-Testing

Menggunakan JUnit dari dalam Eclipse IDE dan dari command-line. Ini berhubungan dengan poin pertama saya. Anda juga bisa menggunakan beberapa alat bantu kualitas kode Java pada proyek GWT (untuk pemeriksaan sumber, bukan pemeriksaan bytecode, karena tidak ada).

Ini semua tentang kamu!!

GWT bukan untuk semua orang. Itu membuat beberapa orang lebih produktif dan memberikan alat yang baik untuk pengembang non-JS untuk membangun aplikasi web profesional dengan ujung depan yang dinamis tanpa menyentuh (terlalu banyak) JavaScript. Tetapi jika itu tidak berhasil untuk Anda, gunakan saja yang lain.

Jika Anda ingin sebagian besar di atas tetapi Anda tidak ingin Java, mungkin lihat Google Closure , atau Dojo Toolkit .

Adalah Ide Yang Baik Saat itu: Sejarah Penting !!

Dunia JavaScript (dan teknologi front-end web pada umumnya) sangat aktif akhir-akhir ini, jadi semuanya terlihat cerah. Tetapi hanya beberapa tahun yang lalu, keadaan tidak begitu cerah. KURANG / SASS tidak sepopuler itu, jQuery belum menjadi perpustakaan JS de-factory, perpustakaan JavaScript tidak muncul setiap minggu, dan tooling pada umumnya tidak terlalu bagus.

Tapi, sudah ada permintaan untuk aplikasi web profesional dan besar dengan front-end yang dinamis, sehingga ada celah untuk diisi untuk membuat pengembang lebih produktif. JavaScript memiliki banyak sekali jebakan dan keanehan yang perlu Anda waspadai, dan mungkin lebih baik tidak perlu mempedulikannya. Karenanya ceruk untuk alat seperti GWT.

Sejak itu, yang lain muncul (CoffeeScript muncul di benak, Dart sedang dalam perjalanan, tetapi juga kerangka kerja JavaScript yang besar, revolusi JS sisi server dengan Node.JS dan lainnya, dan kembalinya yang kuat untuk JavaScript sebagai "cukup baik" semua -bahasa yang akan digunakan tidak hanya di sisi klien tetapi juga di bagian lain dari tumpukan bisnis Anda.


catatan tambahan

Sehubungan dengan Pertanyaan Anda yang Asli (Sekarang Diedit) Tentang Penggunaan Firebug

Anda dapat men-debug kode GWT dengan Firebug tentu saja, tetapi idealnya Anda akan men-debug langsung dari debugger Eclipse IDE, yang sekarang menyediakan dukungan debug kode langsung.

Namun, Firebug masih dapat digunakan, meskipun Anda harus ingat bahwa GWT menghasilkan JavaScript yang dioptimalkan dan dikompresi, yang mungkin tidak mudah di-debug seperti apa adanya.

Berkenaan dengan Pertanyaan Asli (Sekarang Diedit) Tentang CSS

Ya, Anda masih perlu menulis kode CSS sendiri, tentu saja. Anda memasangkan proyek GWT Anda dengan alat lain (seperti SASS), lebih atau kurang mudah.

Ini Hanya Alat!

Jangan salah mengira GWT bukan apa-apa: Anda tidak menulis kode Java untuk dijalankan langsung di sisi klien sebagai bytecode Java. Anda menulis kode dalam bahasa Java, yang kemudian diterjemahkan ke JavaScript untuk efisiensi dan untuk memungkinkan Anda menggunakan bahasa tingkat yang lebih tinggi (atau, setidaknya, begitulah seharusnya dilihat).

Bisa dibilang , Java dan JavaScript dapat dianggap sebanding dalam hal tingkat abstraksi. Namun, Java hadir dengan beberapa keuntungan (dirinci di atas), karenanya keuntungan dalam menuai manfaat dari alat yang ada tanpa perlu menulis ulang. Pengembang Google baru saja memiliki ide cerdik untuk memungkinkan untuk menggunakan kembali alat berorientasi Java yang ada, tetapi pada dasarnya mengembangkan aplikasi JavaScript.

Selain itu, mereka memecahkan masalah lain, yang sering kali dikelola rumit dari aplikasi web dua bahasa di mana JavaScript dan kode Java diperlakukan secara terpisah. Penggunaan GWT memungkinkan tingkat konvergensi tertentu untuk kedua sisi proses pengembangan.


Bacaan lebih lanjut:

haylem
sumber
"Bisa dibilang, Java dan JavaScript dapat dianggap sebanding dalam hal ekspresi." Lelucon? Fungsi Setara di Jawa sekitar 5x panjangnya.
kevin cline
@ kevincline: benar, saya tidak bermaksud menulis ekspresif, maksud saya ini adalah level abstraksi. Terima kasih telah melihatnya (ini jam 2
pagi
6
@kevincline: ditambah saya memang mengatakan "diperdebatkan", dan fanatik keras-keras bahasa atau yang lain akan berdebat apa pun :)
haylem
1
Selain item @ Halem, saya akan memasukkan bahwa OO berbasis prototipe JavaScript bisa sedikit aneh bagi seseorang yang datang dari sistem berbasis kelas seperti Java. Konsistensi pendekatan seringkali bermanfaat.
Matius Flynn
@MatthewFlynn: dan sebaliknya: itu sebabnya pengembang JS murni pasti mengalami kesulitan mendapatkan GWT band-wagon, atau menggunakan kerangka kerja yang lebih berat yang mereplikasi lebih atau kurang paradigma OO berbasis kelas.
haylem
6

Setelah menghabiskan bertahun-tahun mengembangkan aplikasi web di GWT, menurut saya GWT memiliki kerugian yang sangat serius sehingga saya tidak akan pernah menggunakannya lagi jika saya tidak dipaksa.

Pohon DOM

Sementara kinerja JavaScript mungkin lebih baik, pohon DOM yang diberikan seringkali tidak perlu rumit. Misalnya, implementasi Tree menggunakan 13+ elemen DOM termasuk <tabel> untuk setiap item individual. Menggunakan pohon besar (sekitar 10.000 item) cukup membekukan browser. Pohon JavaScript / HTML / CSS murni dapat menangani jumlah item yang sama dengan mudah.

Pengembangan

Siklus modifikasi-coba sumber JavaScript / HTML / CSS murni tidak dapat dikalahkan. Anda cukup menyimpan file sumber Anda dan menyegarkan halaman di browser. Ini adalah faktor kunci dalam produktivitas dan GWT tidak dapat bersaing bahkan dengan menggunakan server kode.

Men-debug JavaScript sangat mudah dan menyenangkan dengan debugger Chrome atau Firebug.

Ahli Palu

Gagasan menggunakan Java untuk semuanya adalah untuk pengembang yang merupakan "ahli palu". Mereka adalah tuan dari palu mereka sehingga semuanya adalah paku. Saya pikir pendekatan ini sangat salah. Menggunakan GWT juga membutuhkan pengetahuan tentang CSS dan HTML. Tanpa ini, pengembang GWT sering menghadapi masalah yang mereka temukan hampir mustahil untuk dipecahkan, sementara seseorang dengan pengalaman HTML / CSS dapat menemukan solusi. Jika pengembang membutuhkan kompetensi ini, mereka bisa lebih mudah dengan mengembangkan dalam HTML.

Pendapat saya adalah bahwa sebagian besar keuntungan yang diberikan oleh GWT setidaknya dipertanyakan sementara kerugiannya jauh lebih serius dibandingkan dengan pengembangan dalam JavaScript / HTML / CSS murni.

Zsolt Sky
sumber
2

Ini tidak terukur lebih baik.
Untuk penggunaan sehari-hari, pertimbangkan jQuery , AmpleSDK , atau polyfill html5 .

GWT memiliki banyak overhead: aktual dan konseptual.

Mungkin bermanfaat jika Anda memiliki aplikasi java atau beberapa kode java sisi server untuk port ke antarmuka web.

ZJR
sumber
Maksud Anda ClojureScript. Clojure sendiri merupakan bahasa berbasis LISP yang menargetkan JVM. ClojureScript adalah yang memproduksi kode JS.
haylem
Yap, bagaimanapun juga sudah diedit. Menjaga agar tetap sederhana.
ZJR
2

Beberapa manfaat menggunakan GWT yang saya pikirkan (detail lebih lanjut baca blog saya http://www.pandurangpatil.com/2012/09/penghasilan-of-menggunakan-gwt.html )

  1. Karena aplikasi klien GWT ditulis dalam Java, seseorang mendapatkan kesempatan untuk menangkap kesalahan sintaksis pada waktu kompilasi karena hal yang sama (Meskipun tidak mendukung semua kelas JRE karena fitur-fitur tersebut tidak didukung oleh browser itu sendiri). Mari kita ambil contoh untuk memahami apa yang saya katakan. Jika Anda salah mengeja nama variabel JavaScript dengan menggunakan pustaka JavaScript murni. Satu-satunya cara Anda dapat menangkap kesalahan seperti itu adalah menjalankan aplikasi dan menguji untuk hasil yang diinginkan. Fitur Java seperti Generics dan Annotations digunakan penuh dan dapat digunakan dalam aplikasi Anda.

  2. Satu dapat menggunakan perpustakaan yang ada yang ada atau menulis satu untuk menghasilkan kode sesuai kebutuhan dengan mudah karena kode yang perlu dihasilkan harus di Jawa. Kompiler GWT menangani kompilasi dan mengubahnya menjadi JavaScript.

  3. Pengelolaan kode menjadi lebih mudah.

  4. Seseorang dapat dengan mudah menulis beberapa logika bisnis umum sedemikian rupa sehingga dapat digunakan dalam kode sisi klien GWT dan juga pada kode sisi server seperti pada Java misalnya validasi data atau beberapa fungsi utilitas umum.

  5. Dengan menggunakan plug-in GWT eclipse, Anda dapat dengan mudah men-debug kode klien di Jawa untuk logika bisnis Anda.

  6. Saat kompiler GWT mengkompilasi kode Java klien Anda dan menghasilkan JavaScript darinya. Yang mana Anda perlu menyebarkannya ke server Anda, dan itu akan dilayani dan dieksekusi di browser pengguna ketika diminta. Saat menghasilkan JavaScript ini, ia akan melakukan beberapa optimasi.

    • Itu tidak mempertimbangkan kode mati saat menghasilkan JavaScript, ketika saya mengatakan kode mati saya bermaksud mengatakan "kode yang ada tetapi tidak dipanggil dari aliran utama". Pada gilirannya mengurangi ukuran efektif kode JavaScript akhir Anda.

    • Ini menangani mengacaukan kode JavaScript yang dihasilkan.

    • Itu melakukan minification dari kode JavaScript yang dihasilkan.

    • Dan yang lebih penting itu akan menghasilkan kode dioptimalkan spesifik browser secara terpisah. Ketika saya katakan secara terpisah, itu akan menghasilkan JavaScript terpisah khusus browser yang akan dilayani ketika permintaan masing-masing diterima dari browser yang diberikan. Yang pada gilirannya mengurangi ukuran kode JavaScript yang diunduh untuk browser tertentu karena tidak berisi semua penanganan khusus browser dalam satu kode tunggal.

  7. Jika Anda menulis aplikasi Anda untuk berbagai bahasa yaitu Inggris, Hindi, Marathi dll dengan menggunakan fitur Internasionalisasi GWT. Saat menghasilkan kode JavaScript, ia menciptakan salinan per bahasa dan kombinasi browser. Yang membuat kode JavaScript yang dihasilkan untuk kombinasi bahasa dan browser yang diberikan paling optimal dan kecil.

  8. Jika Anda perlu menggunakan JavaScript langsung yang dapat dipanggil dari kode Java GWT, Anda dapat melakukannya menggunakan JSNI (JavaScript Native Interface). Satu bahkan dapat memanggil Kode Java GWT kembali dari JavaSctipt.

  9. Jika Anda ingin membuat halaman yang dapat Bookmark maka Anda dapat menggunakan fitur History dari GWT.

  10. Jika Anda ingin menggunakan JSON sebagai format data untuk komunikasi dan manipulasi, JSON memiliki fitur yang sangat bagus yang disebut Tipe Hamparan JavaScript.

  11. Fitur Binding Ditangguhkan dari GWT adalah fitur yang baik yang saya kira mungkin untuk diberikan karena Java.

  12. Anda dapat membangun antarmuka pengguna menggunakan widget GWT yang tersedia dalam gaya Java Swing. Anda bahkan dapat membuat widget khusus dengan sangat mudah.

  13. Jika Anda ingin membangun antarmuka pengguna (halaman Web) dalam gaya html murni, Anda dapat menggunakan fitur UI Deklaratif GWT. Yang saya rasakan salah satu fitur utama GWT. Yang membuatnya lebih mudah bagi pengembang untuk membangun halaman dengan gaya HTML murni. Yang saya kira lebih mudah dikelola daripada coding gaya Swing. Dan yang paling penting Anda masih dapat memiliki logika di Jawa dan hanya bagian presentasi dalam HTML murni. (Catatan: metode apa pun yang Anda gunakan (Declarative UI atau Swing Style) pada akhirnya hanya akan berupa HTML, tetapi yang membuat perbedaan adalah cara Anda membuat kode dan memeliharanya).

  14. Fitur Bundle Klien dari GWT membuatnya sangat mudah untuk mengelola sumber daya web lainnya seperti css, gambar, dan konten teks lainnya.

    • Sumber daya CSS memungkinkan untuk memiliki logika kondisional di dalam css Anda. Anda juga dapat mengakses beberapa nilai dinamis dari kode Java sisi klien GWT Anda.
    • Ini juga akan membantu mengaburkan kelas css Anda. Dan yang paling penting GWT memiliki generasi antarmuka otomatis dari file css Anda untuk menggunakan class css.
    • Sumber daya gambar memudahkan pengembang untuk menggunakan gambar dalam aplikasi Anda dengan cara yang sangat mudah dirawat. Ketika saya mengatakannya dengan mudah, saya bermaksud mengatakan kapan Anda ingin menggunakan gambar dalam kode Java GWT daripada menggunakan URL kode keras, Anda dapat menggunakan sumber daya gambar. Manfaat yang akan Anda peroleh dengan menggunakan sumber daya gambar adalah jika Anda akan mengubah lokasi atau menggunakan beberapa gambar berbeda dengan nama yang berbeda, Anda hanya perlu mengubahnya di satu lokasi. Fitur yang lebih penting dari sumber daya gambar adalah ketika Anda menggunakannya dengan sumber daya CSS sebagai sprite. Ini akan menjaga menjadikan gambar itu sebagai data in-line uri atau menggunakannya dengan sprite. Saya tidak mengatakan itu tidak mungkin untuk dilakukan dengan kerangka kerja lain yang lebih penting adalah seberapa cepat dan mudah Anda bisa melakukannya. GWT memudahkan Anda.
    • Sumber Daya Data menambahkan beberapa optimisasi untuk file data seperti .pdf untuk mengubah nama file-file tersebut berdasarkan isinya untuk membuatnya sangat dapat di-cache oleh browser. File data kecil dapat dikonversi menjadi data in-line uri.
    • Dengan memanfaatkan Bundel Klien untuk sumber daya web lainnya dan jika Anda menyusun aplikasi dengan benar ke modul yang berbeda. Ini dapat menjadi modul yang sepenuhnya dapat digunakan kembali secara keseluruhan dengan setiap sumber daya. Apa masalah besar tentang modul yang dapat digunakan kembali? baik jika Anda menggunakan gambar dengan menggunakan URL langsung di beberapa modul. Dan jika Anda memasukkan modul itu ke modul lain dan mencoba menggunakan komponen yang dibuat dalam modul itu, Anda masih perlu menyalin gambar-gambar itu ke URL publik dari aplikasi akhir Anda. Yang tidak harus Anda lakukan jika Anda menggunakan gambar-gambar itu sebagai sumber daya gambar.
    • Pengoptimalan lain yang dapat Anda capai dengan membuat modul kecil dengan menggunakan bundel klien untuk css dan gambar. Di mana Anda dapat memilih untuk menyertakan hanya modul yang diperlukan di dalam modul akhir Anda. Perbedaannya adalah JavaScript modul final dan sumber daya lainnya hanya akan berisi konten yang diperlukan dan bukan seluruh konten, bahkan jika Anda ingin menggunakan sebagian kecil modul.
  15. Widget Sel: Untuk menyajikan pengumpulan data paginasi, GWT memiliki Widget Sel. Ada widget seperti CellTable, CellList, CellTree dan CellBrowser.

    • CellTable dimaksudkan untuk menyajikan data dalam format tabel paginated, ia memiliki fitur di mana Anda dapat mengubah konten sel yang diberikan di tempat. Ini mendukung pagination pada sisi klien dan sisi server keduanya, mendukung penyortiran pada kolom dan juga mendukung pemilihan satu atau beberapa catatan dan menghasilkan peristiwa yang sama.
    • CellList dapat digunakan untuk menyajikan data dalam format daftar dan item dapat ditampilkan dalam format khusus. Ini juga mendukung pagination sisi klien dan server dan pemilihan satu atau beberapa catatan dan menghasilkan acara untuk seleksi. CellTree dan CellBrowser dapat digunakan untuk menyajikan data dalam format pohon.
  16. Komunikasi dengan server dari kode klien GWT. Ini mendukung berbagai cara untuk mengimplementasikan komunikasi server klien.

    • Jika Anda tidak khawatir tentang protokol yang digunakan untuk transfer data maka itu adalah mekanisme GWT RPC. Sangat mudah untuk mengintegrasikan kode sisi klien Anda untuk transfer data dengan server. Anda dapat menentukan kustom DTO (objek transfer data) dalam kode klien yang bahkan dapat digunakan pada kode sisi server. Implementasi sisi server menerima DTO yang sama sebagai parameter atau nilai pengembalian. Segala sesuatu yang lain diurus oleh bingkai kerja GWT RPC. Bahkan merambatkan pengecualian yang dimunculkan dari kode sisi server ke pemanggil dalam kode sisi klien (Asalkan Anda perlu mendefinisikan kelas-kelas Pengecualian di dalam paket kode sisi klien. GWT RPC secara internal menggunakan panggilan AJAX dengan protokol khusus mereka sendiri untuk transfer data.

    • Jika Anda tidak ingin menggunakan GWT RPC, Anda dapat membuat panggilan server AJAX untuk mengambil data dari server menggunakan Request Builder. Yang juga lebih mudah diimplementasikan. Ini juga memiliki fitur Permintaan Pabrik yang menarik. Dengan fitur ini Anda dapat membuat lapisan DAO atau Layanan Anda terpapar untuk dipanggil dari kode klien. Untuk melakukan itu, Anda perlu mendefinisikan beberapa set antarmuka untuk layanan dan tipe data khusus Anda. Dan menggunakan antarmuka ini, Anda dapat mengakses layanan tersebut dari kode klien. Saya telah menulis plugin pakar untuk menghasilkan antarmuka ini. Jika Anda memberi anotasi pada layer DAO Anda dengan beberapa rujukan penjelasan yang diperlukan ( https://github.com/pandurangpatil/gwt-mvn-helper) lihat modul mvn-helper-test di dalamnya untuk penggunaan. Request Factory lebih ditargetkan untuk berintegrasi dengan lapisan ORM seperti JDO atau JPA di server. Ini memiliki dukungan untuk memanggil tetap pada entitas yang diberikan dari kode klien. Dan yang paling penting ketika Anda memanggil metode bertahan itu menghitung dan hanya mengirim perubahan (delta) ke server untuk menyimpan.

    • Jika Anda ingin membuat panggilan JSONP lintas domain, Anda dapat melakukan rujukan yang sama.

Pandurang Patil
sumber