Cạm bẫy GWT lớn nhất? [đóng cửa]


189

Tôi đang ở đầu / giữa của một dự án mà chúng tôi đã chọn để thực hiện bằng cách sử dụng GWT. Có ai gặp phải bất kỳ cạm bẫy lớn nào trong việc sử dụng GWT (và GWT-EXT) mà không thể khắc phục được không? Làm thế nào về một quan điểm hiệu suất?

Một vài điều mà chúng tôi đã thấy / nghe đã bao gồm:

  • Google không thể lập chỉ mục nội dung
  • CSS và kiểu dáng nói chung có vẻ hơi khó hiểu

Tìm kiếm bất kỳ thông tin phản hồi bổ sung về các mặt hàng là tốt. Cảm ơn!


4
Gần đây tôi đã nhận thấy một số trang web dựa trên GWT xuất hiện chính xác trong kết quả tìm kiếm Google của tôi, mặc dù html cơ bản không bao gồm thông tin tôi đang tìm kiếm (example.roughian.com có ​​một số loại kết quả này). Có vẻ như người lập chỉ mục Google phải thực hiện một số kết xuất javascript thông minh để tìm ra những gì thực sự sẽ hiển thị trên một trang sau khi mọi thứ tải lên.
StriplingWar Warrior

Câu trả lời:


231

Tôi sẽ bắt đầu bằng cách nói rằng tôi là một người hâm mộ GWT khổng lồ, nhưng vâng, có nhiều cạm bẫy, nhưng hầu hết nếu không phải là tất cả những gì chúng tôi có thể vượt qua:

Vấn đề: Thời gian biên dịch dài, khi dự án của bạn phát triển, số lượng thời gian cần thiết để biên dịch nó. Tôi đã nghe nói về các báo cáo về các biên dịch 20 phút, nhưng của tôi trung bình khoảng 1 phút.

Giải pháp: Chia mã của bạn thành các mô-đun riêng biệt và báo cho kiến ​​chỉ xây dựng mã khi thay đổi. Ngoài ra, trong khi phát triển, bạn có thể tăng tốc độ biên dịch ồ ạt bằng cách chỉ xây dựng cho một trình duyệt. Bạn có thể làm điều này bằng cách đặt nó vào tệp .gwt.xml của bạn:

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

Trong đó gecko1_8 là Firefox 2+, tức là 6 là IE, v.v.


Vấn đề: Chế độ được lưu trữ rất chậm (ít nhất là trên OS X) và không gần với các thay đổi 'trực tiếp' bạn nhận được khi bạn chỉnh sửa những thứ như trang JSP hoặc Rails và nhấn refresh trong trình duyệt của bạn.

Giải pháp: Bạn có thể cung cấp cho chế độ lưu trữ nhiều bộ nhớ hơn (tôi thường có 512M) nhưng nó vẫn chậm, tôi đã tìm thấy một khi bạn đủ tốt với GWT, bạn sẽ ngừng sử dụng. Bạn thực hiện một lượng lớn các thay đổi, sau đó biên dịch cho chỉ một trình duyệt (thường là giá trị biên dịch trong 20 năm) và sau đó chỉ cần nhấn refresh trong trình duyệt của bạn.

Cập nhật: Với GWT 2.0+, đây không còn là vấn đề nữa, vì bạn sử dụng 'Chế độ phát triển' mới. Về cơ bản, điều đó có nghĩa là bạn có thể chạy mã trực tiếp trong trình duyệt của mình, do đó, không mất tốc độ, ngoài ra bạn có thể bắn / kiểm tra mã, v.v.

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


Vấn đề: Mã GWT là java và có một tâm lý khác khi đặt trang HTML, điều này khiến cho việc thiết kế HTML và biến nó thành GWT khó hơn

Giải pháp: Một lần nữa bạn đã quen với điều này, nhưng không may chuyển đổi thiết kế HTML sang thiết kế GWT sẽ luôn chậm hơn so với thực hiện một việc gì đó như chuyển đổi thiết kế HTML sang trang JSP.


Vấn đề: GWT mất một chút để có được đầu óc của bạn, và chưa phải là chủ đạo. Có nghĩa là hầu hết các nhà phát triển tham gia nhóm của bạn hoặc duy trì mã của bạn sẽ phải học nó từ đầu

Giải pháp: Vẫn còn phải xem nếu GWT sẽ cất cánh, nhưng nếu bạn là công ty kiểm soát người bạn thuê, thì bạn luôn có thể chọn những người biết GWT hoặc muốn tìm hiểu.


Vấn đề: GWT là một búa tạ so với một cái gì đó như jquery hoặc chỉ là javascript đơn giản. Phải mất nhiều thiết lập hơn để có được nó xảy ra thay vì chỉ bao gồm một tệp JS.

Giải pháp: Sử dụng các thư viện như jquery cho các tác vụ nhỏ hơn, đơn giản phù hợp với các tác vụ đó. Sử dụng GWT khi bạn muốn xây dựng một cái gì đó thực sự phức tạp trong AJAX hoặc nơi bạn cần truyền dữ liệu của mình qua lại thông qua cơ chế RPC.


Vấn đề: Đôi khi để điền trang GWT của bạn, bạn cần thực hiện cuộc gọi máy chủ khi trang tải lần đầu tiên. Người dùng có thể khó chịu khi ngồi đó và xem biểu tượng tải trong khi bạn lấy dữ liệu bạn cần.

Giải pháp: Trong trường hợp trang JSP, trang của bạn đã được máy chủ kết xuất trước khi trở thành HTML, do đó bạn thực sự có thể thực hiện tất cả các cuộc gọi GWT của mình sau đó và tải trước chúng lên trang để tải ngay lập tức. Xem tại đây để biết chi tiết:

Tăng tốc độ tải trang bằng cách tuần tự hóa trước các cuộc gọi GWT của bạn


Tôi chưa bao giờ có bất kỳ vấn đề nào về việc CSS tạo kiểu cho các vật dụng của mình, ngoài hộp, tùy chỉnh hay nói cách khác, vì vậy tôi không biết ý của bạn là gì khi đó là một cạm bẫy?

Về hiệu năng, tôi luôn thấy rằng một khi mã GWT được biên dịch nhanh và các cuộc gọi AJAX gần như luôn luôn nhỏ hơn so với làm mới toàn bộ trang, nhưng điều đó không thực sự độc đáo với GWT, mặc dù các gói RPC gốc mà bạn nhận được nếu bạn sử dụng một mặt sau JAVA khá nhỏ gọn.


1
Chúng tôi đã gặp phải một số vấn đề trong đó các kiểu định vị / lệnh định vị khác nhau dường như không "thực hiện" - các kiểu không được sử dụng ở nơi chúng nên có hoặc kích thước của một phần tử dường như bỏ qua yêu cầu để thực hiện 100%. Giống như nhiều thách thức CSS thông thường - hoàn toàn có thể có rất nhiều lỗi người dùng!
agartzke

@agartzke vâng đó là CSS dành cho bạn và hầu như không liên quan gì đến GWT. Đó là lý do tại sao chúng tôi sử dụng các nhà thiết kế có tay nghề cao để làm điều đó cho chúng tôi. Làm cho nó đúng trong 4 trình duyệt khác nhau không bao giờ là một nhiệm vụ dễ dàng.
rustyshelf

1
Có nhiều tính năng mới xuất hiện vào cuối năm nay giúp cải thiện rất nhiều vấn đề này. Chế độ lưu trữ ngoài quy trình (OOPHM), CssResource (obduscation / minifying theo kiểu), UiBinder (còn gọi là 'UI khai báo').
Đánh dấu Renouf

Tôi đang mong chờ 2.0 nhưng tôi không đồng ý với việc GWT là búa tạ. Nếu đó là trường hợp thì jQuery và JavaScript là một mối quan hệ tốt nhất. Quan điểm của tôi là tôi không được sử dụng lại, cuối cùng tôi đã dán rất nhiều thứ (giả sử: một hộp văn bản trên 4 trang hoạt động giống hệt nhau ở mỗi nơi). Điều đó không có nghĩa là bạn nên loại bỏ tất cả các ứng dụng cũ của mình. Tôi sẽ (gần như) không bao giờ sử dụng GWT để thêm khả năng cho ứng dụng html / js hiện có. Ngoài ra Tài nguyên CSS nằm trong vườn ươm và tôi thích chúng: stackoverflow.com/questions/1066250/gwt-html-file-with-css/ trên .
Chris Ruffalo

2
Bạn có thể sử dụng lại JQuery nhiều như bạn có thể sử dụng lại GWT, tôi không nghĩ đó là một đối số hợp lệ. Cả hai đều hỗ trợ kế thừa và sau đó cả hai có thể được đóng gói để sử dụng lại (tệp .jar cho tệp GWT, .js cho JQuery). Tôi đứng trước những gì tôi đã nói GWT là một chiếc búa tạ, bạn phải viết mã bằng Java, bạn phải biên dịch nó, bạn có rất nhiều thứ để quản lý. Nếu bạn muốn phá vỡ một bức tường gạch, bạn chọn búa tạ. Nó không phải là một cr viêmcm đó là một điểm hợp lệ. Công cụ phù hợp cho công việc phù hợp.
rustyshelf

54

Chúng tôi đã làm việc với gwt gần 2 năm. Chúng tôi đã học được rất nhiều bài học. Đây là những gì chúng tôi nghĩ:

  1. Không sử dụng các thư viện widget của bên thứ ba, đặc biệt là gwt-ext. Nó sẽ giết hiệu suất gỡ lỗi, phát triển và thời gian chạy của bạn. Nếu bạn có thắc mắc về điều này xảy ra, liên hệ trực tiếp với tôi.

  2. Sử dụng gwt để chỉ điền vào các phần động của ứng dụng của bạn. Vì vậy, nếu bạn có một số tương tác người dùng phức tạp với nhiều trường. Tuy nhiên, không sử dụng bảng đi kèm. Lấy các trang thiết kế chứng khoán hiện có của bạn cung cấp. Thực hiện các khu vực sẽ chứa các điều khiển cho ứng dụng của bạn. Đính kèm các điều khiển này vào trang trong onModuleLoad (). Bằng cách này, bạn có thể sử dụng các trang tiêu chuẩn từ nhà thiết kế của mình và cũng thực hiện tất cả các kiểu dáng bên ngoài gwt.

  3. Không xây dựng toàn bộ ứng dụng dưới dạng một trang tiêu chuẩn, sau đó tự động xây dựng tất cả các phần. Nếu bạn làm những gì tôi đề xuất trong mục 2, thì điều này sẽ không xảy ra. Nếu bạn xây dựng mọi thứ một cách linh hoạt, bạn sẽ giết chết hiệu suất và tiêu thụ một lượng lớn bộ nhớ cho các ứng dụng từ trung bình đến lớn. Ngoài ra, nếu bạn làm những gì tôi đang đề xuất, nút quay lại sẽ hoạt động rất tốt, do đó, công cụ tìm kiếm sẽ lập chỉ mục, v.v.

Các bình luận khác cũng có một số gợi ý tốt. Nguyên tắc tôi sử dụng là tạo các trang giống như bạn đang làm một trang web chuẩn. Sau đó khắc ra những mảnh cần phải năng động. Thay thế chúng bằng các phần tử có id và sau đó sử dụng RootPanel.get( id ).add( widget )để điền vào các khu vực đó.


Tôi đã mở một câu hỏi liên quan đến câu trả lời của bạn tại stackoverflow.com/q/10025656/138585 . Tôi sẽ đánh giá cao nếu bạn có thể có một cái nhìn.
Elad

20

Cạm bẫy mà chúng ta gặp phải:

  • Mặc dù bạn có thể nhận được rất nhiều dặm từ việc sử dụng một cái gì đó như GWT EXT, bất cứ khi nào bạn sử dụng loại veneer mỏng này trên đầu thư viện JavaScript, bạn sẽ mất khả năng gỡ lỗi. Đã hơn một lần tôi đập đầu vào bàn vì tôi không thể kiểm tra (bên trong trình gỡ lỗi IntelliJ của tôi) những gì đang xảy ra trong lớp bảng GWT EXT ... Tất cả những gì bạn có thể thấy là đó là JavaScriptObject. Điều này làm cho nó khá khó khăn để tìm ra những gì đã sai ...

  • Không có ai đó trong nhóm của bạn biết CSS. Từ kinh nghiệm của tôi, không có vấn đề gì khi người đó không phải là chuyên gia ... đủ để anh ta có kiến ​​thức làm việc tốt và biết các điều khoản phù hợp với google khi cần thiết.

  • Gỡ lỗi trên các trình duyệt. Để mắt đến Chế độ lưu trữ ngoài quy trình [ 1 ] [ 2 ] [ 3 ], hy vọng sẽ có trong GWT 1.6 ... Hiện tại, bạn chỉ cần làm mọi thứ tốt với chế độ được lưu trữ, sau đó sử dụng nút "Biên dịch / Duyệt" , nơi bạn có thể chơi với các trình duyệt khác. Đối với tôi, làm việc trên Windows, điều này có nghĩa là tôi có thể xem công việc của mình trong FireFox và sử dụng FireBug để giúp điều chỉnh và làm cho mọi thứ tốt hơn.

  • IE6. Thật đáng ngạc nhiên khi IE 6 khác nhau sẽ khiến mọi thứ trở nên như thế nào. Tôi đã áp dụng cách tiếp cận để áp dụng một kiểu cho "khung nhìn" ngoài cùng theo trình duyệt để tôi có thể có các quy tắc CSS như:

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

Cuối cùng, hãy chắc chắn rằng bạn sử dụng một trình soạn thảo giúp bạn. Tôi sử dụng IntelliJ - nó có rất nhiều thông minh GWT. Ví dụ: Nếu tôi cố gắng sử dụng một lớp không được xử lý bởi mô phỏng JRE, nó sẽ cho tôi biết; nếu tôi chỉ định một kiểu cho một widget và tôi chưa xác định kiểu đó, mã sẽ có một chút màu đỏ nguệch ngoạc ... Hoặc, khi nhìn vào CSS, nó sẽ cho tôi biết khi tôi đã chỉ định các thuộc tính xung đột trong một quy tắc duy nhất. (Tôi chưa thử nó, nhưng tôi hiểu rằng phiên bản 8 thậm chí còn hỗ trợ GWT tốt hơn, như giữ các giao diện và triển khai RPC "cục bộ" và "không đồng bộ".)


18

GWT 2.0, được cho là sẽ xuất hiện vào lúc nào đó trong vài tháng tới, giải quyết được rất nhiều vấn đề được thảo luận.

  • Tạo bố cục bằng cú pháp như html / xml
  • Tải tập lệnh động - chỉ có JS cần thiết mới được tải xuống ban đầu. Phần còn lại sẽ được tải xuống khi cần thiết
  • Chế độ lưu trữ trong trình duyệt - Điều này có thể giải quyết các vấn đề về tốc độ của chế độ lưu trữ được thảo luận, trong số các lợi ích khác
  • "Tối ưu hóa trình biên dịch" - Biên dịch nhanh hơn, hy vọng

Video xem trước GWT 2.0 tại Google I / O


15

Không phải "không thể vượt qua" mà là một chút đau đớn cho một cái gì đó cơ bản.

Ngày xử lý:

GWT sử dụng không dùng nữa java.util.Datecó thể dẫn đến hành vi không mong muốn khi xử lý ngày ở phía khách hàng. java.util.Calendarkhông được hỗ trợ bởi GWT. Thêm thông tin ở đây .

Ví dụ vấn đề liên quan:


1
Hai năm sau, và đây vẫn là trường hợp. Nó vẫn còn khá khó chịu để làm toán ngày trên máy khách.
Joseph Lust

Vấn đề là bản dịch (biên dịch) từ java.util.CalendarJavaScript. Bạn cũng có thể xem lớp của GWTCalendarUtil , Cách sử dụng java.util.CalWiki trong GWTCách thực hiện các thao tác lịch trong Java GWT? Làm thế nào để thêm ngày vào một ngày? . Chúc mừng;)
olibre

10

Tôi sẽ thêm một số điểm vào những điểm đã được đề cập:

  • Databinding / xác nhận. GWT không có hỗ trợ xác thực / xác thực dữ liệu ngoài hộp, mặc dù có một số dự án trên khu vực này bắt đầu xuất hiện. Bạn sẽ thấy mình viết rất nhiều về điều này:
Tên văn bản TextField, faddress;
...
fname.setText (person.getName ());
faddress.setText (person.getAddress ());
...
  • Lười tải. Vì gwt ở phía máy khách, nên tải lười biếng thực sự không phải là một lựa chọn. Bạn sẽ phải thiết kế RPC và Đối tượng miền một cách cẩn thận để
    • gửi tất cả dữ liệu đối tượng của bạn là cần thiết
    • tránh háo hức tìm nạp tất cả dữ liệu của bạn
    • Bạn cũng sẽ phải đảm bảo rằng bạn sẽ không gửi proxy / các đối tượng không tuần tự hóa. hibernate4gwt có thể giúp bạn với những điểm này.
  • Thiết kế giao diện người dùng. Hình dung một giao diện người dùng trong java (Bảng, Nút, v.v.) khó hơn so với html.
  • Hỗ trợ lịch sử. GWT không giao hàng với hệ thống con Lịch sử, cũng không giao hàng với bất kỳ hệ thống con nào cho các url hay đánh dấu trạng thái tốt. Bạn sẽ phải tự cuộn (mặc dù nó có hỗ trợ cho các mã thông báo Lịch sử, đây là một sự khởi đầu). Điều này xảy ra với tất cả các bộ công cụ AJAX AFAIK.

IMHO, GWT đang thiếu một khung hỗ trợ vượt ra ngoài tất cả các vấn đề được đề cập trên 'chủ đề' này.


GWT không giao hàng với một hệ thống lịch sử, ví dụ History.newItem ("myItem", false); sẽ đặt #myItem vào url để đánh dấu trang dễ dàng. Để xử lý ai đó đang tải bookmark bằng ứng dụng của bạn, chỉ cần sử dụng History.addValueChangeHandler (myHandlerMethod);
Ztranger

Đây không phải là một hệ thống lịch sử, nó chỉ là một cơ chế để viết mã thông báo vào URL và xử lý mã thông báo thay đổi thông báo. Bạn vẫn sẽ phải viết tất cả mã ứng dụng để xử lý thay đổi lịch sử.
Miguel Ping

9

Tôi hiện đang làm việc trên một dự án sử dụng EXT GWT (GXT) để không bị nhầm lẫn với GWT EXT. Có một sự khác biệt, EXT GWT là một sản phẩm thực sự được sản xuất bởi công ty đã viết ExtJS thư viện javascript. GWT EXT là một trình bao bọc GWT xung quanh thư viện ExtJS. GXT là GWT bản địa.

Dù sao, GXT vẫn còn hơi non nớt và thiếu một cộng đồng vững chắc mà tôi cảm thấy GWT EXT có. Tuy nhiên, tương lai là với GXT, vì nó là GWT bản địa và thực sự được phát triển bởi công ty sản xuất ExtJS. GWT EXT có phần bị tê liệt khi giấy phép thay đổi trên thư viện ExtJS, do đó làm chậm sự phát triển của GWT EXT.

Nhìn chung, tôi nghĩ rằng GWT / GXT là một giải pháp tốt để phát triển ứng dụng web. Tôi thực sự khá thích chế độ lưu trữ để phát triển, nó làm cho mọi thứ nhanh chóng và dễ dàng. Bạn cũng nhận được lợi ích là có thể gỡ lỗi mã của bạn. Các bài kiểm tra đơn vị với JUnit cũng khá chắc chắn. Tôi chưa thấy một khung thử nghiệm đơn vị JavaScript tuyệt vời mà tôi cảm thấy đã đủ trưởng thành để thử nghiệm một ứng dụng doanh nghiệp.

Để biết thêm thông tin về GWT EXT: http://gwt-ext.com/

Để biết thêm thông tin về EXT GWT (GXT): http://extjs.com/products/gxt/


1
Vì câu hỏi này vẫn còn hoạt động và nhận được phiếu bầu, tôi nghĩ rằng tôi sẽ cung cấp một bản cập nhật. Tôi đã hoàn toàn từ bỏ GXT (2009-2010) vì tôi không thích các hoạt động kinh doanh của Sencha Inc. Sau đó tôi đã bỏ rơi GWT. Tôi sợ sử dụng JavaScript miễn là tôi sử dụng để ghét nó. Đó là, cho đến khi tôi thực sự hiểu nó. Bây giờ tôi gần như độc quyền phát triển trong Node.js / AngularJS. Truy cập vào Bootstrap 3 và bạn có thể tạo một trang web trông tuyệt vời trong thời gian ngắn hơn nhiều so với GWT. Tương lai là JavaScript, bạn càng sớm nắm bắt nó, bạn sẽ càng phát triển tốt hơn.
JP Richardson

Ý kiến ​​của bạn bây giờ là gì? (chỉ tò mò) Cảm ơn.
Akos Lukacs

1
@AkosLukacs Tôi vẫn có thể báo cáo rằng tôi đang sử dụng JavaScript và yêu thích từng chút một! Như tôi đã nói, tôi sử dụng để ghét JavaScript và do đó tại sao tôi chọn GWT. Thực tế là bạn sẽ không thể tránh JavaScript nếu bạn sẽ thực hiện bất kỳ phát triển web nào, vì vậy bạn cũng có thể nắm lấy nó. Tôi đã thích nghi khá nhiều với việc sử dụng JavaScript cho mọi thứ (đi đường vòng nhẹ với Go). Theo như ngăn xếp của tôi, tôi sử dụng Node.js / Express / React. Tôi từng là một fan hâm mộ lớn của Angular và biết nó khá rõ, nhưng tôi không thể giới thiệu Angular 1.x cho bất cứ ai bắt đầu với JS vì đường cong học tập quá cao.
JP Richardson

5

Không có cạm bẫy lớn nào mà tôi không thể vượt qua dễ dàng. Sử dụng chế độ lưu trữ rất nhiều. Vì bạn đang sử dụng GWT-ext, bạn sẽ gần như không cần phải chạm vào CSS trừ khi bạn muốn điều chỉnh giao diện bên ngoài.

Đề nghị của tôi là sử dụng tiện ích "gốc" của GWT trên thư viện nơi chúng có các tính năng gần gũi.

Lập chỉ mục công cụ tìm kiếm lại: có, trang web sẽ không có URL có thể điều hướng thông thường (trừ khi bạn chỉ thêm các tiện ích vào các thành phần của một trang web thông thường). Bạn có thể làm chức năng lịch sử trở lại / chuyển tiếp mặc dù.


4

Tôi đã sử dụng GWT và GWT-ext cùng nhau trong một dự án cách đây một thời gian. Tôi thấy trải nghiệm khá suôn sẻ khi phát triển web, nhưng lời khuyên của tôi sẽ là:

Không trộn các widget gốc của GWT với các widget EXT. Thật khó hiểu như địa ngục, vì thông thường các tên giống nhau (GWT.Button hoặc GWText.Button?)

Một điều xảy ra với tôi thực sự làm cho mã phức tạp hơn tôi muốn, đó là tôi muốn có một Bảng điều khiển là một) có thể cập nhật động b) có thể ghép được

Bảng gốc GWT là động, bảng Ext là cascadable. Giải pháp? Một GWT.V verticalPanel bao bọc một Bảng điều khiển GWTExt ... Hỗn loạn. :)

Nhưng này, nó hoạt động. ;)


4

Tôi thứ hai nhận xét từ ykagano, nhược điểm lớn nhất là mất V trong MVC. Mặc dù bạn có thể tách lớp ui thực khỏi phần còn lại của mã phía máy khách, bạn không thể dễ dàng sử dụng trang HTML được tạo bởi nhà thiết kế đồ họa / web. Điều này có nghĩa là bạn cần một nhà phát triển để dịch HTML sang java.

Nhận một trình soạn thảo wysiwyg ui, nó sẽ giúp bạn tiết kiệm rất nhiều thời gian. Tôi sử dụng GWTDesigner.

Ưu điểm lớn nhất của GWT là có thể quên đi các vấn đề về trình duyệt chéo. Nó không phải là 100% nhưng mất đi gần như tất cả nỗi đau đó. Kết hợp với lợi ích của việc gỡ lỗi chế độ được lưu trữ (trái ngược với Fireorms rất tuyệt vời nhưng không giống như trình gỡ lỗi java), nó mang lại cho nhà phát triển một lợi thế rất lớn trong việc tạo các ứng dụng ajax phức tạp.

Oh và nó nhanh khi chạy, đặc biệt nếu bạn sử dụng bộ lọc gzip.


1
Không biết về bộ lọc gzip - cảm ơn vì mẩu tin đó.
agartzke

4

Hơi lạc đề, nhưng kênh #gwt trên irc rất hữu ích, trong trường hợp bạn gặp vấn đề dai dẳng.


kênh IRC nào là kênh trên?
tovare

Đó là trên freenode (irc.freenode.net). Và nó thực sự là ## gwt, nhưng bạn sẽ được chuyển tiếp tới nó nếu bạn gõ #gwt.
stian

4

GWT khá đơn giản và trực quan.

Đặc biệt với việc phát hành UIBinder để cho phép các widget của GWT được trình bày trong XML và sau đó được mã hóa lại bằng Java.

Vì vậy, nếu bạn đã sử dụng các công cụ thiết kế Ajax hoặc Flash khác, hoặc Silverlight, v.v., thì GWT rất dễ học.

Rào cản lớn, nếu không phải là cạm bẫy, là GWT RPC. Lý do bạn muốn sử dụng GWT là vì RPC async RPC. Nếu không, tại sao không chỉ dựa vào css để định dạng trang của bạn?

GWT RPC là yếu tố cho phép máy chủ của bạn làm mới dữ liệu trên máy chủ của bạn mà không phải làm mới trang. Đây là một yêu cầu tuyệt đối cho các trang như giám sát hiệu suất cổ phiếu (hoặc nợ quốc gia và nợ công hiện tại của Hoa Kỳ hoặc số trẻ sơ sinh chưa sinh bị phá thai trên toàn thế giới trước đó).

GWT RPC mất một số nỗ lực để hiểu nhưng trong một vài giờ, nó sẽ trở nên rõ ràng.

Trên hết, sau khi nỗ lực tìm hiểu GWT RPC, cuối cùng bạn cũng phát hiện ra rằng bạn không thể sử dụng các tệp JSP làm thành phần dịch vụ cho RPC, trừ khi ... Tôi có một loạt 8 phần (tôi nghĩ) trên blog của mình về cách sử dụng JSP như trình phục vụ GWT RPC. Tuy nhiên, vì bạn đã không yêu cầu câu trả lời mà chỉ là vấn đề, tôi sẽ ngừng quảng cáo blog của mình.

Vì thế. Tôi rất tin tưởng rằng những trở ngại / cạm bẫy tồi tệ nhất khi sử dụng GWT là tìm ra cách triển khai đúng cách RPC async RPC và cách kích hoạt nó để sử dụng các trình phục vụ của JSP.


Tôi muốn một liên kết đến các bài viết trên blog của bạn;)
ms-tg

h2g2java.blishedgeek.com
Geek

3

Chúng tôi đã rất khó khăn khi kết hôn với cơ sở mã GWT của chúng tôi với các mẫu web HTML mà chúng tôi đã nhận được từ một nhà thiết kế web (các trang HTML tĩnh với các id div cụ thể mà chúng tôi muốn quản lý GWT). Ít nhất là trở lại khi chúng tôi sử dụng nó, chúng tôi không thể tích hợp GWT với các phần của trang web không được mã hóa trong GWT. Cuối cùng chúng tôi đã làm việc, nhưng đó là một vụ hack lớn.


3
  • Giao diện Async mà bạn phải viết cho mỗi giao diện dịch vụ trông giống như một cái gì đó có thể được trình biên dịch GWT tự động tạo ra.
  • Thời gian biên dịch trở nên dài cho các dự án lớn

Nhưng đối với một dự án Javascript lớn thì đó là sự lựa chọn tốt nhất


3

GWT 2.4 đã khắc phục nhiều sự cố đã nói ở trên và một thư viện widget tuyệt vời sắp ra mắt Beta (Ext GWT 3.0.4 hay GXT), được viết hoàn toàn bằng GWT, không phải là một trình bao bọc của một lib lib.

Nỗi đau còn lại:

  • Thiếu hỗ trợ bộ chọn CSS3, bạn có thể sử dụng "lít ()" trong một số trường hợp để khắc phục nó.
  • Thiếu hỗ trợ cho CSS3 và các sự kiện trình duyệt hiện đại như quá trình chuyển đổi .
  • Thiếu hỗ trợ lớp Lịch Java (nhiều năm sau).
  • Thiếu hỗ trợ JUnit4 (5 năm và sẽ tính).
  • Thiếu bản đồ đường rõ ràng và lịch phát hành từ nhóm Google GWT.

2

Về GWT 2.4, Sử dụng Firefox khi gỡ lỗi GWT, nó nhanh hơn rất nhiều sau đó sử dụng chrome. Và nếu bạn sẽ chỉ sử dụng firefox, hãy xem xét đưa dòng này vào tệp project.gwt.xml của bạn

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

Ngoài ra, nếu bạn đang sử dụng nhật thực, thì hãy thêm phần dưới đây vào các đối số -> đối số VM:

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

Bạn có thể chia máy chủ và máy khách của mình và sử dụng các mục sau trong các đối số -> Đối số chương trình: -codeServerPort 9997 -startupUrl http: // mineerver / project -noserver

Ngoài ra, để ngăn chặn việc làm mới máy chủ của bạn trên mỗi thay đổi, hãy sử dụng JRebel http://zeroturnaround.com/blog/how-to-rock-out-with-jrebel-and-google-web-toolkit-gwt/ Và đây là bản demo trực tiếp http://www.youtube.com/watch?feature=player_embedded&v=4JGGFCzspaY


1

Một khó khăn lớn là đôi khi bạn cần gán rõ ràng một id cho cái cuối cùng trở thành một phần tử HTML để có thể sử dụng các kiểu CSS nhất định. Ví dụ: TabPanel của GWT sẽ chỉ thực hiện: di chuột qua tabBarItems khi tabBar của tabPanel đã được gán một id và bạn chỉ định: hover trên phần tử đó.

Tôi đã viết về một số nhược điểm khác của GWT ở nơi khác, nhưng chúng đã được bao phủ bởi câu trả lời của rustyshelf :).


Nói chung việc gán ID không phải là một điều xấu nếu bạn có kế hoạch kiểm tra bằng Selenium.
Petteri Hietavirta

1

Tôi đã thực hiện rất nhiều công việc trên GWT gần đây và đây là điều tôi phải nói:

  1. Kiểu dáng CSS đôi khi chỉ khó khăn, sử dụng công cụ dành cho nhà phát triển IE trong IE và fireorms trong Firefox để tìm hiểu chính xác điều gì đang xảy ra và bạn sẽ có ý tưởng rõ ràng về những gì css cần phải thay đổi
  2. Bạn có thể sử dụng các thủ thuật để có được google để lập chỉ mục. Một trang web rất nổi tiếng là http://examples.roughian.com/ kiểm tra xếp hạng của nó tại google. Một trang web ít nổi tiếng hơn là www.salvin.in (không thể đề cập đến điều đó), tôi đã tối ưu hóa nó thành các từ: trang chủ salvin (tìm kiếm google cho ba từ này)

Tôi không biết nhiều về GWT-EXT, nhưng tôi cũng tin rằng không cần phải bao gồm các thư viện của bên thứ ba.

Chúc may mắn cho quyết định của bạn :)


1

GWT thực hiện Trình duyệt đánh hơi thay vì Phát hiện tính năng và ứng dụng của bạn sẽ không hoạt động trên một số trình duyệt (những trình duyệt đặc biệt mới)

Dưới đây là một số tài liệu tham khảo của vấn đề:

Dưới đây là một số tài liệu tham khảo về Phát hiện tính năng:

Trích xuất từ So sánh các khung JavaScript - Wikipedia


1

Nhóm GWT thực hiện rất nhiều cải tiến lớn trong năm ngoái khi phát hành GWT 2.7. Một điểm yếu lớn của GWT là việc biên dịch mất nhiều thời gian trong GWT 2.6 trở xuống. Điều này đã biến mất, GWT không biên dịch gia tăng, siêu nhanh và chỉ biên dịch các thay đổi.

GWT 2.7 hiện có ( Nguồn ):

  • Xây dựng tăng dần chỉ trong vài giây
  • SourceMaps nhỏ gọn hơn, chính xác hơn
  • Hỗ trợ GSS
  • Chuyên gia
  • Hiệu suất JavaScript tuyệt vời
  • Kích thước mã nhỏ hơn

1

Cách tốt nhất để có được sự thật đáng tin cậy là từ khảo sát gwt . Một trong những vấn đề lớn nhất với GWT luôn là thời gian biên dịch dài. May mắn thay, nó đang cải thiện rất nhanh nên sẽ không còn là vấn đề quan trọng trong tương lai gần. Một cạm bẫy khác là GWT phức tạp hơn đáng kể vì Java là ngôn ngữ phức tạp hơn chống lại các lập trình viên xấu mỗi bước. Ngoài ra, biên dịch thêm một lớp. Ví dụ, js interop yêu cầu một cái nồi hơi nhỏ. Vấn đề cơ bản là GWT không được thiết kế đơn giản. Nó được thiết kế từ đầu cho các ứng dụng web cực kỳ phức tạp và toàn bộ cộng đồng luôn ưu tiên, hiệu suất, chất lượng mã, kiến ​​trúc vân vân hơn mã hóa dễ dàng.
Hãy nhớ rằng bạn có thể sử dụng js trong GWT tại bất kỳ thời điểm nào vì vậy nếu bạn đang vật lộn với GWT, hãy cân nhắc sử dụng js. Vào cuối ngày, GWT là js để bạn có thể làm bất cứ điều gì trong GWT mà bạn có thể làm trong js. Trong thực tế, hầu hết các dự án GWT sử dụng js. Vấn đề là GWT phức tạp hơn nhiều. Tuy nhiên, đôi khi nó có giá trị phức tạp thêm.

Điều đáng chú ý là GWT 3.0 sẽ mang lại những cải tiến lớn.


0

Sử dụng lại các đối tượng dịch vụ RPC.
Nó gây ra tình trạng chủng tộc với các triệu chứng trông giống như ứng dụng treo.


Antony bạn có thể giải thích về điều này. Tôi đang thực hiện một cuộc gọi RPC đến máy chủ và hy vọng GUI sẽ được phản hồi cho đến khi yêu cầu quay lại nhưng nó dường như bị treo.
Brett Hannah

0

Cạm bẫy tôi gặp phải 1. Hành vi khác nhau trong chế độ superdev. Ví dụ: Someclass. Class.getName () hoạt động hoàn toàn tốt trong chế độ Superdev và trả về tên đủ điều kiện của lớp. Trong chế độ sản xuất, điều này không hoạt động.

  1. addWidget (widget) sẽ gọi removefromparent () của widget

0

GWT là một kiệt tác công nghệ. Nó kết hợp lập trình máy khách và máy chủ làm cho nó trở thành một ứng dụng mạch lạc - cách phần mềm được viết trước khi "xếp lớp" và cách viết. Nó loại bỏ các bộ kỹ năng khác nhau, thông tin sai lệch giữa các thành viên trong nhóm và nói chung là toàn bộ giai đoạn Thiết kế Web: cả nghệ thuật và lập trình. Và đây là lần gần nhất bạn có được với thiết bị di động, ví dụ như phát triển Android. Trong thực tế, GWT được thiết kế để tạo các UI gốc khác nhau, không chỉ HTML. Mặc dù nó đòi hỏi kỷ luật rất lớn để đảm bảo sự tách rời như vậy - để giữ cho lớp bên trong của bạn không bị thuyết trình.

Sai lầm đầu tiên bạn nên tránh, khiến tôi mất bốn năm để nhận ra, là sử dụng các tiện ích mở rộng của bên thứ ba như EXT-GWT hay GXT và SmartGWT. Sẽ rất hấp dẫn khi bắt đầu sử dụng các widget đẹp mắt của họ thay vì đầu tư vào kiểu dáng của riêng bạn, nhưng tôi không thể biết mình đã gặp phải bao nhiêu vấn đề với SmartGWT cho đến khi cuối cùng tôi đã chán ngấy. Nói tóm lại, nó đóng băng tính năng GWT cốt lõi được đặt ở mức nhất định (khá lỗi thời) và sau đó được xây dựng trên đầu trang. Ngoài ra, hãy nhớ rằng, giao diện máy tính để bàn bị đục hiện nay trông thật ngớ ngẩn, chưa kể đến hiệu suất chậm chạp, hàng tấn lỗi và các tính năng tương thích - đặc biệt là trên các thiết bị di động. Bạn muốn ở gần các điều khiển trình duyệt riêng, càng tốt, tức là thả xuống được hiển thị dưới dạng các phần tử <select> gốc, chứ không phải một số điều khiển được vẽ tùy chỉnh.

Nhờ xu hướng di động, toàn bộ UX đang trở nên đơn giản và phẳng hơn, vì vậy bạn không cần phải làm gì nhiều để tạo kiểu cho một ứng dụng sắc nét. Mặc dù nếu bạn muốn giao diện "3D", cũng có độ dốc. CSS3 làm cho mọi thứ trở nên dễ dàng và GWT kết thúc nó theo cách hướng đối tượng thanh lịch không giống như CSS thô. Vì vậy, đừng nản lòng khi nhìn vào các điều khiển barebones khá xấu xí trong Showcase của GWT. Nhóm GWT cố tình không cung cấp bất kỳ kiểu dáng nào, bởi vì đó là công việc của nhà phát triển.

Phần còn lại là khá nhiều chương trình trình duyệt thông thường trong Java được gõ mạnh với các API súc tích đẹp mắt. Nhưng tất nhiên không bao giờ quên mã của bạn chạy bên trong trình duyệt, vì vậy tất cả các cuộc gọi đều không đồng bộ, ví dụ: bạn không thể gọi các phương thức GWT-RPC trong một vòng lặp (để điền vào danh sách một số), nhưng cần phải lặp lại theo chuỗi nếu bạn đến tình hình.

Có một số "chống mẫu" tự xưng như không sử dụng GWT-RPC. Điều đó tốt cho tôi cho đến nay: trong 10 năm. Đơn giản là chìa khóa. Tôi sẽ không nghĩ dù chỉ một giây để hy sinh một số hiệu suất cận biên cho sự thanh lịch và khả năng bảo trì của mã. ngoài ra đây không phải là nơi tắc nghẽn của bạn - trong cơ sở dữ liệu. Tất nhiên hãy nhớ bao nhiêu dữ liệu bạn đang gửi cho khách hàng.

Và nếu bạn không thể tìm hoặc tạo kiểu cho tiện ích hiện có - đọc bộ phần tử HTML5 phong phú, bạn luôn có thể bọc một bên thứ ba. Tôi đã làm điều đó với một jQuery FullCalWiki phổ biến. Không khoa học tên lửa nào cả. Mọi thứ khác như Google Maps và Google Charts đều có các hàm bao GWT bán chính thức.

GWT là hoàn hảo. Lý do duy nhất khiến nó không có đủ tình yêu là vì những người sử dụng Internet sớm vẫn còn ảnh hưởng đến ngành công nghiệp không đến từ Khoa học máy tính và các ngôn ngữ hướng đối tượng để đánh giá cao họ. Chúng có nền tảng nghệ thuật (Photoshop / WordPress) hoặc mạng (Perl / Python).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.