Saf JavaScript çerçeveleri üzerinde GWT gibi araçların kanıtlanmış avantajları nelerdir?


11

GWT, Java kodunu ve Java Runtime sınıf kitaplığının bir alt kümesini JavaScript koduna çeviren bir yazılım yığınıdır.

JavaScript araç setleriyle karşılaştırıldığında, GWT doğası gereği ve kullanıma göre yabancılaşabilir ve basit şeyler yapmak için aşırı derecede karmaşık görünebilir ve doğrudan JavaScript kullanarak sahip olduğunuz ince taneli kontrolün çoğunu ortadan kaldırabilir.

Bir web geliştiricisi neden saf JavaScript ve JavaScript çerçeveleri ve araç setleri kullanmak yerine, aslında web için hedeflenmeyen bir dil kullanan GWT gibi bir araç kullanmayı tercih etsin?

Ölçülebilir derecede daha iyi ve hangi kriterlere dayanıyor?

Yanıtlar:


27

Piller dahildir

Java'nın Araçları

Sadece harika:

  • IDE'ler: bazı IDE'ler JavaScript'i desteklese bile, destek düzeyi karşılaştırılmaz. JavaScript kodunu büyük kod tabanlarında (örneğin, 40K + LOC) yeniden ağlamaya çalışın.
  • Birim Testi: Son birkaç yılda ortaya çıkmasına rağmen, Java dünyasında da daha olgun.
  • Sürekli Entegrasyon ve Sürekli Denetim
  • Doküman Üretimi: Tabii ki JSDoc ve birkaç tane daha var

Statik-yazma

Böcekleri erken yakalar. (Google Closure, geliştiriciyi isterseniz JavaScript dünyasında tutarken bunu biraz ele alır).

Optimize edilmiş JavaScript

GWT sizden daha hızlı ve daha kompakt bir JavaScript yazar (büyük uygulamalar için) ve istemciye neyin gönderileceğini eşdeğer tam JS çözümlerinden daha kolay bir şekilde belirlemenizi sağlar.

Mimari

Parmak uçlarınızda önceden pişirilmiş iyi MVC veya MVP mimarileri ile büyük uygulamalar için endişelerin iyi bir şekilde ayrılmasını sağlar.

İyi Kütüphane

GWT ilginç kütüphaneler sağlar ve dinamik paket yükleme ile I18N etkin uygulamalar oluşturmayı kolaylaştırır (iyi, daha kolay).

Birim-Test

Eclipse IDE içinden ve komut satırından JUnit kullanma. Bu benim ilk noktam ile ilgilidir. Ayrıca, Java'nın bazı kod kalitesi araçlarını bir GWT projesinde de kullanabilirsiniz (kaynak kontrolleri için, bayt kodu kontrolleri için değil, hiçbiri olmadığı için).

Hepsi seninle alakalı!!

GWT herkes için değil. Bazı insanları daha üretken hale getirir ve JS dışı geliştiricilere (çok fazla) JavaScript'e dokunmadan dinamik ön uçlarla profesyonel web uygulamaları geliştirmeleri için iyi bir araç sağlar. Ama bu sizin için işe yaramazsa, sadece başka bir şey kullanın.

Yukarıdakilerin çoğunu istiyorsanız, ancak Java'yı istemiyorsanız, belki Google Closure'a veya Dojo Araç Seti'ne bakın .

O Zaman İyi Bir Fikirdi: Tarih Önemlidir !!

JavaScript dünyası (ve genel olarak web ön uç teknolojileri) bu günlerde son derece aktiftir, bu yüzden işler artar. Ama sadece birkaç yıl önce, işler o kadar parlak değildi. LESS / SASS o kadar popüler değildi, jQuery henüz fabrikadaki JS kütüphanesi değildi, JavaScript kütüphaneleri iki haftada bir ortaya çıkmadı ve takımlar genel olarak harika değildi.

Ancak, dinamik ön uçlara sahip profesyonel ve büyük web uygulamaları için artan bir talep vardı, bu nedenle geliştiricileri daha üretken hale getirmek için doldurulması gereken bir boşluk vardı. JavaScript'in farkında olmanız gereken pek çok tuzak ve tuhaflık vardır ve belki de bunlarla ilgilenmemeniz daha iyidir. Bu nedenle GWT gibi araçlar için niş.

O zamandan beri, diğerleri ortaya çıktı (CoffeeScript akla geliyor, Dart geliyor, aynı zamanda büyük JavaScript çerçeveleri, Node.JS ve diğerleri ile sunucu tarafı JS devrimi ve JavaScript için "yeterince iyi" olarak güçlü bir geri dönüş - dil, yalnızca istemci tarafında değil, aynı zamanda iş yığınızın diğer bölümlerinde de kullanılabilir.


ek Notlar

Firebug Kullanımı Hakkında Orijinal (Şimdi Düzenlendi) Sorunuzla ilgili

GWT kodunu Firebug ile hata ayıklayabilirsiniz, ancak ideal olarak doğrudan Eclipse IDE'nin hata ayıklayıcısından hata ayıklayabilirsiniz, bu da şimdi canlı kod hata ayıklama desteği sağlar.

Bununla birlikte, Firebug hala kullanılabilir, ancak GWT'nin hata ayıklaması kolay olmadığı gibi optimize edilmiş ve sıkıştırılmış JavaScript oluşturduğunu unutmayın.

CSS Hakkında Orijinal (Şimdi Düzenlendi) Sorunuzla İlgili

Evet, elbette CSS kodunu kendiniz yazmanız gerekiyor. GWT projenizi (SASS gibi) diğer araçlarla aşağı yukarı kolayca birleştirebilirsiniz.

Bu sadece bir araç!

GWT'yi olmayan şeyle karıştırmayın: Java kodunu doğrudan istemci tarafında Java bayt kodu olarak çalıştırılacak şekilde yazmazsınız. Sen kod yazmak içinde (o görülmemesi gerekiyordu böyle yürüyor, en azından, ya) daha sonra verimlilik için JavaScript çevrilmiştir ve daha yüksek seviyeli bir dil kullanmasına izin Java dili.

Tartışmalı olarak , Java ve JavaScript soyutlama seviyeleri açısından karşılaştırılabilir olarak kabul edilebilir. Bununla birlikte, Java'nın bazı avantajları vardır (yukarıda detaylandırılmıştır), bu nedenle mevcut araçların yararlarını yeniden yazmaya gerek kalmadan elde etme avantajı vardır. Google'ın geliştiricileri, mevcut Java odaklı araçları yeniden kullanmayı mümkün kılmak için akıllıca bir fikre sahipti, ancak aslında JavaScript uygulamaları geliştirdi.

Ayrıca, JavaScript ve Java kodunun ayrı ayrı ele alındığı çift dilli web uygulamalarının sık sık yönettiği başka bir sorunu çözüyorlar. GWT kullanımı, geliştirme sürecinin her iki tarafı için belirli bir yakınsama seviyesine izin verir.


Daha fazla okuma:


"Tartışmalı bir şekilde, Java ve JavaScript ifade bakımından karşılaştırılabilir olarak kabul edilebilir." Şaka? Java'da eşdeğer işlevsellik yaklaşık 5 kat daha uzundur.
kevin cline

@kevincline: doğru, anlamlılık yazmak istememiştim, soyutlama seviyeleri anlamına geliyordu.
Tespit ettiğiniz

6
@kevincline: artı "tartışmalı" dedim ve bir dilin ya da başka bir şeyin sert fanatikleri her şeyi tartışır :)
haylem

1
@ Halem'in öğelerine ek olarak, JavaScript'in prototip tabanlı OO'sunun Java gibi sınıf tabanlı bir sistemden gelen biri için biraz garip olabileceğini de söyleyebilirim. Yaklaşımın tutarlılığı genellikle yararlıdır.
Matthew Flynn

@MatthewFlynn: ve tersi: bu yüzden saf JS geliştiricileri kesinlikle GWT bant vagonuna girmek veya az çok sınıf tabanlı bir OO paradigmasını çoğaltan daha ağır çerçeveler kullanmakta zorlanıyorlar.
haylem

6

GWT'de bir web uygulaması geliştirerek yıllar geçirdikten sonra, bence GWT'nin o kadar ciddi dezavantajları var ki, zorlanmadıysam tekrar kullanmam.

DOM ağacı

JavaScript performansı daha iyi olsa da, oluşturulan DOM ağacı genellikle gereksiz karmaşıktır. Örneğin, Tree uygulaması her bir öğe için <table> dahil 13+ DOM öğesi kullanır. Büyük ağaçlar kullanmak (yaklaşık 10000 öğe) tarayıcıyı dondurur. Saf bir JavaScript / HTML / CSS ağacı aynı miktarda öğeyi kolayca işleyebildi.

gelişme

Saf JavaScript / HTML / CSS kaynağının değiştir-dene döngüsü yenemez. Sadece kaynak dosyanızı kaydedin ve sayfayı tarayıcıda yenileyin. Bu verimlilikte önemli bir faktördür ve GWT sadece kod sunucusu kullanarak bile rekabet edemez.

JavaScript hata ayıklama, Chrome veya Firebug hata ayıklayıcı ile kesinlikle kolay ve zevklidir.

Hammer Uzmanları

Java'yı her şey için kullanma fikri "çekiç uzmanları" olan geliştiriciler içindir. Onlar çekiçlerinin ustalarıdır, bu yüzden her şey bir çividir. Bence bu yaklaşım çok yanlış. GWT kullanmak ayrıca CSS ve HTML bilgisi gerektirir. Bu GWT geliştiricileri genellikle çözmek neredeyse imkansız buldukları sorunlara çarparken, HTML / CSS deneyimi olan biri bir çözüm bulabilir. Geliştiricilerin bu yetkinliğe ihtiyacı varsa HTML'de geliştirmeyi kolaylaştırabilirler.

Benim düşüncem, GWT'nin sağladığı avantajların çoğunun en azından tartışmalı olması, dezavantajların saf JavaScript / HTML / CSS'de geliştirmeye kıyasla çok daha ciddi olmasıdır.


2

Ölçülebilir derecede daha iyi değil.
Günlük kullanım için jQuery , AmpleSDK veya bazı html5 çoklu dolguyu düşünün .

GWT'nin çok fazla yükü var: gerçek ve kavramsal.

Web ön ucuna bağlantı kurmak için bir java uygulamanız veya bazı sunucu tarafı java kodunuz varsa yararlı olabilir .


ClojureScript'i kastediyorsunuz. Clojure'un kendisi JVM'yi hedefleyen LISP tabanlı bir dildir. ClojureScript, JS kodu üreten koddur.
haylem

Evet, zaten bunu zaten düzenlemişti. Basit tutmak.
ZJR

2

Düşündüğüm GWT kullanmanın birkaç faydası (daha fazla bilgi http://www.pandurangpatil.com/2012/09/benefits-of-using-gwt.html adresini okuyun )

  1. GWT istemci uygulaması Java ile yazıldığından, biri aynı zamanda derleme zamanında sözdizimsel hataları yakalamak için bir fırsat olsun (Bu özellikler tarayıcıların kendisi tarafından desteklenmediği için tüm JRE sınıflarını desteklemese de). Ne dediğimi anlamak için bir örnek alalım. Bir JavaScript değişken adını saf JavaScript kitaplığı kullanarak yanlış yazarsanız. Böyle bir hatayı yakalamanın tek yolu, uygulamayı çalıştırmak ve istenen sonuçları test etmektir. Generics ve Annotations gibi Java özellikleri tam olarak kullanılmaktadır ve uygulamanızda kullanılabilir.

  2. Mevcut kitaplıklardan yararlanılabilir ya da ihtiyaç duyulan kodun kolaylıkla üretilmesi için kodun Java'da olması gerektiğinden bir kod yazabilir. GWT derleyici onu derlemeye ve JavaScript'e dönüştürmeye özen gösterir.

  3. Kod yönetimi daha kolay hale gelir.

  4. Bazı yaygın iş mantığı, GWT istemci tarafı kodunda ve ayrıca Java'daki gibi sunucu tarafı kodunda kullanılabilecek şekilde, örneğin verilerin doğrulanması veya bazı ortak yardımcı işlevler gibi yazılabilir.

  5. GWT eclipse eklentisini kullanarak, iş mantığınız için Java'daki istemci kodunda kolayca hata ayıklayabilirsiniz.

  6. GWT derleyicisi istemcinizin Java kodunu derlediğinden ve dışarıdan JavaScript ürettiğinden. Bunu sunucunuza dağıtmanız gerekir ve istendiğinde kullanıcı tarayıcısında sunulur ve çalıştırılır. Bu JavaScript'i oluştururken bazı optimizasyonlar yapacak.

    • JavaScript oluştururken ölü kodu dikkate almaz, ölü kodu söylediğimde "kod var ama ana akıştan çağrılmıyor" demek istiyorum. Buna karşılık, son JavaScript kodunuzun etkin boyutunu azaltır.

    • Oluşturulan JavaScript kodunu gizlemeye özen gösterir.

    • Oluşturulan JavaScript kodunun küçültülmesini sağlar.

    • Ve daha da önemlisi tarayıcıya özel optimize edilmiş kodu ayrı ayrı üretecektir. Ayrı ayrı söylediğimde, belirli bir tarayıcıdan ilgili istek alındığında sunulacak tarayıcıya özgü ayrı bir JavaScript oluşturur. Bu da, tarayıcıya özgü tüm işlemleri tek bir kodda içermediğinden, belirli bir tarayıcı için indirilen JavaScript kodunun boyutunu azaltır.

  7. İngilizce, Hintçe, Marathi vb.Gibi farklı diller için başvurunuzu GWT'nin Uluslararasılaşma özelliğini kullanarak yazıyorsanız. JavaScript kodu oluştururken dil ve tarayıcı kombinasyonu başına kopya oluşturur. Bu, belirli bir dil ve tarayıcı kombinasyonu için oluşturulan JavaScript kodunu en uygun ve küçük hale getirir.

  8. Java GWT kodundan çağrılabilen doğrudan JavaScript kullanmanız gerekiyorsa, bunu JSNI (JavaScript Yerel Arabirimi) kullanarak yapabilirsiniz. Hatta GWT Java Kodunu JavaSctipt'den geri çağırabilir.

  9. Yer İşareti kullanabilen sayfalar yapmak istiyorsanız GWT'nin Geçmiş özelliğini kullanabilirsiniz.

  10. İletişim ve manipülasyon için JSON'u veri formatı olarak kullanmak istiyorsanız, JavaScript Yer Paylaşımı Türleri adı verilen çok iyi bir özelliğe sahiptir.

  11. GWT'nin Ertelenmiş Bağlama özelliği, Java nedeniyle sağlamanın mümkün olduğunu düşündüğüm iyi bir özellik.

  12. Java Swing stilinde mevcut GWT widget'larını kullanarak kullanıcı arayüzünüzü oluşturabilirsiniz. Özel widget'larınızı bile kolayca oluşturabilirsiniz.

  13. Kullanıcı arayüzünüzü (Web sayfaları) saf html tarzında oluşturmak istiyorsanız, GWT'nin Bildirici Kullanıcı Arayüzü özelliğini kullanabilirsiniz. Hangi GWT en önemli özelliklerinden biri hissediyorum. Bu, geliştiricinin sayfaları saf HTML tarzında oluşturmasını kolaylaştırır. Sanırım Swing tarzı kodlamadan daha sürdürülebilir. Ve en önemlisi hala mantıksal Java ve sadece sunum kısmı saf HTML olabilir. (Not: Hangi yöntemi kullanırsanız kullanın (Deklaratif UI veya Swing Style) sonuçta sadece HTML olacaktır, ancak fark yaratan şey kodlama ve bakım yönteminizdir).

  14. GWT'nin İstemci Paketi özelliği, css, resimler ve diğer metin içerikleri gibi diğer web kaynaklarınızı yönetmenizi kolaylaştırır.

    • CSS kaynakları, css'inizde koşullu mantığa sahip olmanızı sağlar. Bazı dinamik değerlere GWT istemci tarafı Java kodunuzdan da erişebilirsiniz.
    • Aynı zamanda css sınıflarınızı gizlemeye de özen gösterir. Ve en önemlisi GWT, css dosyalarınızdan css classe'leri kullanmak için otomatik olarak arayüz oluşturmaya sahiptir.
    • Görüntü kaynağı, geliştiricinin uygulamanızdaki görüntüleri çok kolay korunabilir bir şekilde kullanmasını kolaylaştırır. Kolayca söylediğimde, sabit kodlu URL kullanmak yerine GWT Java kodunda görüntü kullanmak istediğinizde, görüntü kaynağını kullanabilirsiniz. Görüntü kaynağını kullanmanın faydası, konumu değiştirecekseniz veya farklı bir adla farklı bir görüntü kullanmanız gerektiğinde, tek bir konumda değiştirmeniz gerekir. Görüntü kaynağının daha önemli bir özelliği de sprite olarak CSS kaynağı ile kullanmanızdır. Bu görüntüyü satır içi veri uri olarak yapmaya veya sprite ile kullanmaya özen gösterecektir. Diğer çerçevelerle bunu yapmanın mümkün olmadığını söylemiyorum, daha önemli olan ne kadar hızlı ve kolay bir şekilde yapabileceğinizdir. GWT sizin için çok daha kolay.
    • Veri Kaynağı, tarayıcı tarafından güçlü bir şekilde önbelleğe alınabilmesi için bu dosyaları içeriklerine göre yeniden adlandırmak üzere .pdf gibi veri dosyaları için bazı optimizasyonlar ekler. Küçük veri dosyaları satır içi veri uri'ye dönüştürülebilir.
    • Diğer web kaynakları için İstemci Paketi'ni kullanarak ve uygulamanızı farklı modüllere düzgün bir şekilde yapılandırırsanız. Her kaynakla birlikte tamamen yeniden kullanılabilir modüller haline gelebilir. Yeniden kullanılabilir modüller ile ilgili önemli olan nedir? bazı modüllerde doğrudan URL kullanarak resim kullanıyorsanız iyi olur. Ve o modülü başka bir modüle ekler ve o modülde oluşturulan bileşenleri kullanmaya çalışırsanız, bu görüntülerin son uygulamanızın genel URL'sine kopyalanması gerekir. Bu görüntüleri görüntü kaynakları olarak kullanıyorsanız, bunu yapmanız gerekmez.
    • Css ve görüntüler için istemci paketini kullanarak küçük modüller oluşturarak elde edebileceğiniz diğer optimizasyonlar. Son modüllerinize yalnızca gerekli modülleri dahil etmeyi seçebilirsiniz. Yapacağı fark, son modül JavaScript ve diğer kaynaklar, modülün küçük bir parçasını kullanmak isteseniz bile, yalnızca gerekli içeriği içerecek, tüm içeriği içerecektir.
  15. Hücre Widget'ları: Sayfalandırılmış veri toplama sunmak için GWT'nin Hücre Widget'ları vardır. CellTable, CellList, CellTree ve CellBrowser gibi widget'lar var.

    • CellTable, verileri sayfalandırılmış tablo biçiminde sunmak içindir, içinde verilen hücrenin içeriğini değiştirebileceğiniz bir özelliğe sahiptir. Hem istemci tarafında hem de sunucu tarafında sayfalandırmayı destekler, sütunda sıralamayı destekler ve aynı zamanda bir veya birden fazla kayıt seçimini ve aynı olayları oluşturmayı destekler.
    • CellList, verileri liste biçiminde sunmak için kullanılabilir ve öğeler özel biçimde görüntülenebilir. Ayrıca istemci ve sunucu tarafı sayfalandırmasını ve bir veya birden çok kaydın seçimini destekler ve seçim için olaylar oluşturur. CellTree ve CellBrowser verileri ağaç biçiminde sunmak için kullanılabilir.
  16. GWT istemci kodundan sunucu ile iletişim. İstemci sunucu iletişimini uygulamanın çeşitli yollarını destekler.

    • Veri aktarımı için kullanılan protokol hakkında endişeleniyorsanız, o zaman GWT RPC mekanizması. Sunucu ile veri aktarımı için istemci tarafı kodunuzu entegre etmek çok kolaydır. İstemci kodunda, sunucu tarafı kodunda bile kullanılabilen özel DTO'ları (veri aktarım nesnesi) tanımlayabilirsiniz. Sunucu tarafı uygulaması, parametre veya dönüş değeriyle aynı DTO'ları kabul eder. Diğer her şey GWT RPC çerçeve çalışması tarafından halledilir. İstemci tarafı kodunda sunucu tarafı kodundan arayan istisnaları bile yayıyor (İstemci tarafı kod paketi içinde bu İstisna sınıflarını tanımlamanız gerekir. GWT RPC, AJAX çağrılarını veri aktarımı için kendi özel protokolleriyle dahili olarak kullanır.

    • GWT RPC'yi kullanmak istemiyorsanız, İstek Oluşturucu'yu kullanarak sunucudan veri almak için sunucu AJAX çağrıları yapabilirsiniz. Bu da uygulanması çok daha kolay. Ayrıca ilginç özelliği İstek Fabrikası vardır. Bu özellik sayesinde DAO veya Servis katmanınızı müşteri kodundan çağrılmak üzere açabilirsiniz. Bunu yapmak için, hizmetiniz ve özel veri türleriniz için birkaç arabirim kümesi tanımlamanız gerekir. Ve bu arayüzleri kullanarak bu servislere istemci kodundan erişebilirsiniz. Bu arayüzü oluşturmak için maven eklentisi yazdım. DAO katmanınıza bazı ek açıklamalarla açıklama eklerseniz bkz. ( Https://github.com/pandurangpatil/gwt-mvn-helper) içindeki mvn-yardımcı-test modülüne bakın. İstek Fabrikası, sunucuda JDO veya JPA gibi ORM katmanıyla tümleştirmeyi hedefler. İstemci kodundan belirli bir varlık üzerinde süreklilik çağrısı desteği vardır. Ve en önemlisi persist yöntemini çağırdığınızda hesaplamak ve sadece değişiklik (delta) kaydetmek için sunucuya göndermek.

    • Alanlar arası JSONP çağrısı yapmak istiyorsanız aynı referansı yapabilirsiniz.

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.