Những lợi thế đã được chứng minh của các công cụ như GWT so với các khung JavaScript thuần túy là gì?


11

GWT là một ngăn xếp phần mềm dịch mã Java và một tập hợp con của thư viện lớp Java Runtime thành mã JavaScript.

So với các bộ công cụ JavaScript, GWT có vẻ xa lạ, về bản chất và cách sử dụng và quá phức tạp để thực hiện ngay cả những việc đơn giản, lấy đi nhiều quyền kiểm soát chi tiết mà bạn có bằng cách sử dụng JavaScript trực tiếp.

Tại sao nhà phát triển web lại chọn sử dụng một công cụ như GWT, sử dụng ngôn ngữ ban đầu không được nhắm mục tiêu cho web, thay vì sử dụng các công cụ và khung công cụ JavaScript và JavaScript thuần túy?

Có tốt hơn không, và dựa trên tiêu chí nào?

Câu trả lời:


27

Pin bao gồm

Công cụ của Java

Nó thật tuyệt vời:

  • IDE: ngay cả khi một số IDE hỗ trợ JavaScript, mức độ hỗ trợ chỉ không so sánh. Cố gắng cấu trúc lại mã JavaScript trên các cơ sở mã lớn (giả sử, 40K + LỘC) và khóc.
  • Kiểm thử đơn vị: mặc dù đã được chọn trong vài năm qua, nhưng nó cũng trưởng thành hơn trong thế giới Java.
  • Tích hợp liên tụckiểm tra liên tục
  • Tạo tài liệu: Chắc chắn bạn có JSDoc và một vài người khác

Gõ tĩnh

Nó bắt bọ sớm. (Google Đóng địa chỉ một chút trong khi giữ nhà phát triển trong thế giới JavaScript, nếu bạn thích).

JavaScript được tối ưu hóa

GWT viết JavaScript nhanh hơn và gọn hơn so với bạn (đối với các ứng dụng lớn) và cho phép bạn xác định những gì được gửi đến máy khách dễ dàng hơn so với các giải pháp JS đầy đủ tương đương.

Ngành kiến ​​trúc

Nó cung cấp một sự phân tách tốt các mối quan tâm cho các ứng dụng lớn, với các kiến ​​trúc MVC hoặc MVP phong nha đã được nướng sẵn trong đầu ngón tay của bạn.

Thư viện Decent

GWT cung cấp các thư viện thú vị và giúp dễ dàng (tốt, dễ dàng hơn) để xây dựng các ứng dụng hỗ trợ I18N với tải gói động.

Kiểm tra đơn vị

Sử dụng JUnit từ bên trong IDE Eclipse và từ dòng lệnh. Điều này liên quan đến điểm đầu tiên của tôi. Bạn cũng rất có thể sử dụng một số công cụ chất lượng mã của Java trong dự án GWT (để kiểm tra nguồn, không phải kiểm tra mã byte, vì không có công cụ nào).

Đó là tất cả về bạn!!

GWT không dành cho tất cả mọi người. Nó làm cho một số người làm việc hiệu quả hơn và cung cấp một công cụ tốt cho các nhà phát triển không phải là JS để xây dựng các ứng dụng web chuyên nghiệp với giao diện người dùng năng động mà không cần chạm vào (quá nhiều) JavaScript. Nhưng nếu nó không hiệu quả với bạn, hãy sử dụng thứ khác.

Nếu bạn muốn hầu hết những điều trên nhưng bạn không muốn Java, có thể xem Google Đóng hoặc Bộ công cụ Dojo .

Là một ý tưởng tốt vào thời điểm đó: Các vấn đề lịch sử !!

Thế giới JavaScript (và các công nghệ đầu cuối web nói chung) cực kỳ hoạt động trong những ngày này, vì vậy mọi thứ đang tìm kiếm. Nhưng chỉ vài năm trở lại đây, mọi thứ không quá sáng sủa. LESS / SASS không phổ biến lắm, jQuery chưa phải là thư viện JS không xuất xưởng, các thư viện JavaScript không được sinh ra mỗi tuần và nói chung công cụ không phải là tuyệt vời.

Tuy nhiên, đã có nhu cầu ngày càng tăng đối với các ứng dụng web chuyên nghiệp và lớn với các giao diện động, do đó, có một khoảng trống để lấp đầy để làm cho các nhà phát triển làm việc hiệu quả hơn. JavaScript có rất nhiều cạm bẫy và những điều kỳ lạ mà bạn cần phải biết và có lẽ tốt hơn là không cần quan tâm đến chúng. Do đó thích hợp cho các công cụ như GWT.

Kể từ đó, những thứ khác đã xuất hiện (CoffeeScript xuất hiện, Dart đang trên đường, nhưng cũng có các khung JavaScript lớn, cuộc cách mạng của JS phía máy chủ với Node.JS và những người khác, và sự trở lại mạnh mẽ của JavaScript là "đủ tốt" ngôn ngữ -around được sử dụng không chỉ ở phía khách hàng mà còn trong các phần khác trong ngăn xếp kinh doanh của bạn.


Ghi chú bổ sung

Đối với câu hỏi ban đầu (đã được chỉnh sửa) của bạn về việc sử dụng Firebird

Tất nhiên, bạn có thể gỡ lỗi mã GWT bằng Fireorms, nhưng lý tưởng nhất là bạn sẽ gỡ lỗi trực tiếp từ trình gỡ lỗi của IDE Eclipse, hiện cung cấp hỗ trợ gỡ lỗi mã trực tiếp.

Tuy nhiên, Fireorms vẫn có thể sử dụng được, mặc dù bạn cần lưu ý rằng GWT tạo JavaScript được tối ưu hóa và nén, điều này có thể không dễ gỡ lỗi như hiện tại.

Đối với câu hỏi ban đầu (Đã chỉnh sửa) của bạn về CSS

Vâng, tất nhiên bạn vẫn cần phải viết mã CSS. Bạn kết hợp dự án GWT của bạn với các công cụ khác (như SASS), dễ dàng hơn hoặc ít hơn.

Nó chỉ là một công cụ!

Đừng nhầm lẫn GWT với những gì không phải: bạn không viết mã Java để được chạy trực tiếp ở phía máy khách dưới dạng mã byte Java. Bạn viết mã bằng ngôn ngữ Java, sau đó được dịch sang JavaScript để đạt hiệu quả và cho phép bạn sử dụng ngôn ngữ cấp cao hơn (hoặc, ít nhất, đó là cách nó được nhìn thấy).

Có thể cho rằng , Java và JavaScript có thể được coi là có thể so sánh về mức độ trừu tượng. Tuy nhiên, Java đi kèm với một số lợi thế (chi tiết ở trên), do đó lợi thế trong việc gặt hái những lợi ích của các công cụ hiện có mà không cần phải viết lại chúng. Các nhà phát triển của Google chỉ có ý tưởng thông minh là làm cho nó có thể sử dụng lại các công cụ định hướng Java hiện có, nhưng thực tế là phát triển các ứng dụng JavaScript.

Ngoài ra, họ giải quyết một vấn đề khác, đó là sự quản lý rườm rà của các ứng dụng web ngôn ngữ kép trong đó mã JavaScript và mã Java được xử lý riêng. Việc sử dụng GWT cho phép một mức độ hội tụ nhất định cho cả hai mặt của quá trình phát triển.


Đọc thêm:


"Có thể cho rằng, Java và JavaScript có thể được coi là có thể so sánh về mặt biểu cảm." Trò đùa? Chức năng tương đương trong Java là khoảng 5x.
kevin cline

@kevincline: chính xác, tôi không có ý viết biểu cảm, ý tôi là nó về các mức độ trừu tượng. Cảm ơn vì đã phát hiện ra nó (đó là 2 giờ sáng ...)
haylem

6
@kevincline: cộng với tôi đã nói "có thể tranh cãi", và những kẻ cuồng tín ngôn ngữ hay ngôn ngữ khác sẽ tranh luận bất cứ điều gì :)
haylem

1
Ngoài các mục của @ Halem, tôi sẽ gửi vào OO dựa trên nguyên mẫu của JavaScript có thể hơi lạ đối với ai đó đến từ một hệ thống dựa trên lớp như Java. Sự nhất quán của phương pháp thường hữu ích.
Matthew Flynn

@Mate
haylem

6

Sau nhiều năm phát triển một ứng dụng web trong GWT, ý kiến ​​của tôi là GWT có những nhược điểm nghiêm trọng đến mức tôi sẽ không bao giờ sử dụng nó nữa nếu tôi không bị ép buộc.

Cây DOM

Mặc dù hiệu suất JavaScript có thể tốt hơn, nhưng cây DOM được kết xuất thường phức tạp không cần thiết. Ví dụ: việc triển khai Tree sử dụng hơn 13 thành phần DOM bao gồm <bảng> cho từng mục riêng lẻ. Sử dụng cây lớn (khoảng 10000 mặt hàng) chỉ đơn giản là đóng băng trình duyệt. Một cây JavaScript / HTML / CSS thuần túy có thể dễ dàng xử lý cùng một lượng vật phẩm.

Phát triển

Không thể đánh bại chu trình thử sửa đổi của nguồn JavaScript / HTML / CSS thuần túy. Bạn chỉ cần lưu tệp nguồn của mình và làm mới trang trong trình duyệt. Đây là yếu tố chính trong năng suất và GWT không thể cạnh tranh ngay cả khi sử dụng máy chủ mã.

Gỡ lỗi JavaScript hoàn toàn dễ dàng và thú vị với trình gỡ lỗi của Chrome hoặc Fireorms.

Chuyên gia búa

Ý tưởng sử dụng Java cho mọi thứ là dành cho các nhà phát triển là "chuyên gia búa". Họ là bậc thầy của cái búa của họ nên mọi thứ đều là đinh. Tôi nghĩ rằng cách tiếp cận này là rất sai. Sử dụng GWT cũng đòi hỏi kiến ​​thức về CSS và HTML. Không có điều này, các nhà phát triển GWT thường gặp phải những vấn đề mà họ thấy gần như không thể giải quyết, trong khi ai đó có kinh nghiệm về HTML / CSS có thể đưa ra giải pháp. Nếu các nhà phát triển cần năng lực này, họ có thể dễ dàng hơn với việc phát triển HTML.

Ý kiến ​​của tôi là hầu hết các ưu điểm do GWT cung cấp ít nhất là đáng nghi ngờ trong khi các nhược điểm nghiêm trọng hơn nhiều so với việc phát triển JavaScript / HTML / CSS thuần túy.


2

Nó không thể đo lường tốt hơn.
Để sử dụng hàng ngày, hãy xem xét jQuery , AmpleSDK hoặc một số polyfill html5 .

GWT có rất nhiều chi phí: thực tế khái niệm.

Có thể có ích nếu bạn có một ứng dụng java hoặc một số mã java phía máy chủ để cổng để một lối vào web.


Ý bạn là ClojureScript. Bản thân Clojure là ngôn ngữ dựa trên LISP nhắm vào JVM. ClojureScript là mã sản xuất.
haylem

Yep, dù sao cũng đã chỉnh sửa nó rồi. Giữ cho nó đơn giản.
ZJR

2

Một số lợi ích của việc sử dụng GWT mà tôi nghĩ đến (chi tiết hơn hãy đọc blog của tôi http://www.pandurangpatil.com/2012/09/benefits-of-USE-gwt.html )

  1. Vì ứng dụng khách của GWT được viết bằng Java, người ta có cơ hội bắt lỗi cú pháp tại thời điểm biên dịch vì giống nhau (Mặc dù nó không hỗ trợ tất cả các lớp JRE vì các tính năng này không được chính các trình duyệt hỗ trợ). Hãy lấy một ví dụ để hiểu những gì tôi đang nói. Nếu bạn viết sai tên biến JavaScript bằng thư viện JavaScript thuần. Cách duy nhất bạn có thể bắt lỗi như vậy là chạy ứng dụng và kiểm tra kết quả mong muốn. Các tính năng Java như Generics và Annotations được sử dụng đầy đủ và có thể được sử dụng trong ứng dụng của bạn.

  2. Người ta có thể sử dụng các thư viện hiện có hoặc viết một thư viện để tạo mã theo yêu cầu một cách dễ dàng vì mã cần được tạo cần phải có trong Java. Trình biên dịch GWT đảm nhiệm việc biên dịch nó và chuyển đổi nó thành JavaScript.

  3. Quản lý mã trở nên dễ dàng hơn.

  4. Người ta có thể chỉ cần viết một số logic nghiệp vụ phổ biến theo cách mà nó có thể được sử dụng trong mã phía máy khách GWT và cả mã phía máy chủ như trong Java, ví dụ như xác thực dữ liệu hoặc một số chức năng tiện ích phổ biến.

  5. Với việc sử dụng trình cắm nhật thực GWT, bạn có thể dễ dàng gỡ lỗi mã máy khách trong Java cho logic nghiệp vụ của mình.

  6. Khi trình biên dịch GWT biên dịch mã Java máy khách của bạn và tạo JavaScript từ nó. Bạn cần triển khai nó đến máy chủ của mình và nó sẽ được phục vụ và thực thi trong trình duyệt người dùng khi được yêu cầu. Trong khi tạo JavaScript này, nó sẽ thực hiện một số tối ưu hóa.

    • Nó không xem xét mã chết trong khi tạo JavaScript, khi tôi nói mã chết tôi có nghĩa là nói "mã ở đó nhưng không được gọi từ luồng chính". Đổi lại, giảm kích thước hiệu quả của mã JavaScript cuối cùng của bạn.

    • Nó chăm sóc mã JavaScript được tạo ra.

    • Nó thực hiện tối thiểu hóa mã JavaScript được tạo.

    • Và quan trọng hơn là nó sẽ tạo mã trình duyệt được tối ưu hóa riêng biệt. Khi tôi nói riêng, nó sẽ tạo JavaScript riêng cho trình duyệt, sẽ được phục vụ khi nhận được yêu cầu tương ứng từ trình duyệt cụ thể. Điều này sẽ làm giảm kích thước của mã JavaScript được tải xuống cho trình duyệt cụ thể vì nó không chứa tất cả các xử lý cụ thể của trình duyệt trong một mã.

  7. Nếu bạn đang viết ứng dụng của mình cho các ngôn ngữ khác nhau, ví dụ như tiếng Anh, tiếng Hindi, tiếng Marathi, v.v ... bằng cách sử dụng tính năng Quốc tế hóa của GWT. Trong khi tạo mã JavaScript, nó tạo bản sao cho mỗi ngôn ngữ và kết hợp trình duyệt. Điều này làm cho mã JavaScript được tạo cho sự kết hợp nhất định giữa ngôn ngữ và trình duyệt tối ưu nhất và nhỏ nhất.

  8. Trong trường hợp bạn cần sử dụng JavaScript trực tiếp có thể được gọi từ mã Java GWT, người ta có thể thực hiện bằng cách sử dụng JSNI (Giao diện gốc JavaScript). Người ta thậm chí có thể gọi lại Mã Java GWT từ JavaSctipt.

  9. Nếu bạn muốn tạo các trang có khả năng Bookmark thì bạn có thể sử dụng tính năng Lịch sử của GWT.

  10. Nếu bạn muốn sử dụng JSON làm định dạng dữ liệu để liên lạc và thao tác, nó có tính năng rất tốt được gọi là Các loại lớp phủ JavaScript.

  11. Tính năng liên kết hoãn lại của GWT là một tính năng tốt mà tôi cho rằng có thể cung cấp do Java.

  12. Bạn có thể xây dựng giao diện người dùng của mình bằng các tiện ích có sẵn của GWT theo kiểu Java Swing. Bạn thậm chí có thể tạo các widget tùy chỉnh của bạn rất dễ dàng.

  13. Nếu bạn muốn xây dựng giao diện người dùng (trang Web) theo kiểu html thuần túy, bạn có thể sử dụng tính năng UI khai báo của GWT. Mà tôi cảm thấy một trong những tính năng chính của GWT. Điều này giúp nhà phát triển xây dựng các trang theo kiểu HTML thuần túy dễ dàng hơn. Mà tôi cho là dễ bảo trì hơn mã hóa kiểu Swing. Và quan trọng nhất là bạn vẫn có thể có logic của mình bằng Java và chỉ có phần trình bày bằng HTML thuần túy. (Lưu ý: phương thức nào bạn sử dụng (Giao diện người dùng khai báo hoặc Kiểu xoay) cuối cùng sẽ chỉ là HTML nhưng điều làm nên sự khác biệt là cách bạn viết mã và duy trì nó).

  14. Tính năng Gói khách hàng của GWT giúp quản lý các tài nguyên web khác của bạn như css, hình ảnh và các nội dung văn bản khác rất dễ dàng.

    • Tài nguyên CSS làm cho nó có thể có logic có điều kiện trong css của bạn. Bạn cũng có thể truy cập một số giá trị động từ mã Java phía máy khách GWT của bạn.
    • Nó cũng sẽ chăm sóc làm xáo trộn các lớp css của bạn. Và quan trọng nhất là GWT đã tự động tạo giao diện từ các tệp css của bạn để sử dụng css classe.
    • Tài nguyên hình ảnh giúp nhà phát triển dễ dàng sử dụng hình ảnh trong ứng dụng của bạn một cách dễ dàng bảo trì. Khi tôi nói dễ dàng, tôi muốn nói khi nào bạn muốn sử dụng hình ảnh trong mã Java của GWT thay vì sử dụng URL được mã hóa cứng, bạn có thể sử dụng tài nguyên hình ảnh. Lợi ích bạn sẽ nhận được khi sử dụng tài nguyên hình ảnh là nếu bạn định thay đổi vị trí hoặc sử dụng một số hình ảnh khác với tên khác, bạn chỉ cần thay đổi nó tại một địa điểm. Tính năng quan trọng hơn của tài nguyên hình ảnh là khi bạn sử dụng nó với tài nguyên CSS dưới dạng sprite. Nó sẽ đảm nhiệm việc tạo hình ảnh đó dưới dạng uri dữ liệu nội tuyến hoặc sử dụng nó với sprite. Tôi không nói rằng không thể làm điều đó với các khung công tác khác, điều quan trọng hơn là bạn có thể thực hiện nhanh chóng và dễ dàng như thế nào. GWT làm cho nó dễ dàng hơn nhiều cho bạn.
    • Tài nguyên dữ liệu thêm một số tối ưu hóa cho các tệp dữ liệu như .pdf để đổi tên các tệp đó dựa trên nội dung của chúng để làm cho nó được lưu trữ mạnh mẽ bởi trình duyệt. Các tệp dữ liệu nhỏ có thể được chuyển đổi thành uri dữ liệu nội tuyến.
    • Bằng cách sử dụng Gói khách hàng cho các tài nguyên web khác và nếu bạn cấu trúc đúng ứng dụng của bạn thành các mô-đun khác nhau. Nó có thể trở thành các mô-đun hoàn toàn có thể tái sử dụng như toàn bộ với mọi tài nguyên. Vấn đề lớn về các mô-đun tái sử dụng là gì? tốt nếu bạn đang sử dụng hình ảnh bằng cách sử dụng URL trực tiếp trong một số mô-đun. Và nếu bạn bao gồm mô-đun đó trong mô-đun khác và cố gắng sử dụng các thành phần được tạo trong mô-đun đó, bạn vẫn cần phải sao chép những hình ảnh đó vào URL công khai của ứng dụng cuối cùng của mình. Mà bạn không phải làm điều đó nếu bạn sử dụng những hình ảnh đó làm tài nguyên hình ảnh.
    • Tối ưu hóa khác bạn có thể đạt được bằng cách tạo các mô-đun nhỏ bằng cách sử dụng gói ứng dụng khách cho css và hình ảnh. Nơi bạn có thể chọn chỉ bao gồm các mô-đun được yêu cầu bên trong mô-đun cuối cùng của bạn. Sự khác biệt mà nó sẽ tạo ra là JavaScript mô-đun cuối cùng và các tài nguyên khác sẽ chỉ chứa nội dung bắt buộc và không chứa toàn bộ nội dung ngay cả khi bạn muốn sử dụng một phần nhỏ của mô-đun.
  15. Các widget di động: Để trình bày bộ sưu tập dữ liệu được phân trang, GWT có các widget di động. Có các widget như CellTable, CellList, CellTree và CellBrowser.

    • CellTable có nghĩa là để trình bày dữ liệu ở định dạng bảng phân trang, nó có tính năng trong đó bạn có thể thay đổi nội dung của ô đã cho. Nó hỗ trợ phân trang ở phía máy khách và cả phía máy chủ, nó hỗ trợ sắp xếp trên cột và nó cũng hỗ trợ lựa chọn một hoặc nhiều bản ghi và tạo các sự kiện cho cùng một.
    • CellList có thể được sử dụng để trình bày dữ liệu ở định dạng danh sách và các mục có thể được hiển thị ở định dạng tùy chỉnh. Nó cũng hỗ trợ phân trang phía máy khách và máy chủ và lựa chọn một hoặc nhiều bản ghi và tạo các sự kiện để lựa chọn. CellTree và CellBrowser có thể được sử dụng để trình bày dữ liệu ở định dạng cây.
  16. Giao tiếp với máy chủ từ mã máy khách GWT. Nó hỗ trợ nhiều cách để thực hiện giao tiếp máy chủ của khách hàng.

    • Nếu bạn không quan tâm đến giao thức được sử dụng để truyền dữ liệu thì cơ chế GWT RPC. Rất dễ dàng để tích hợp mã phía máy khách của bạn để truyền dữ liệu với máy chủ. Bạn có thể xác định DTO (đối tượng truyền dữ liệu) tùy chỉnh trong mã máy khách, thậm chí có thể được sử dụng trên mã phía máy chủ. Việc triển khai phía máy chủ chấp nhận cùng một giá trị DTO như tham số hoặc giá trị trả về. Mọi thứ khác được chăm sóc bởi khung làm việc của GWT RPC. Nó thậm chí còn truyền các ngoại lệ được đưa ra từ mã phía máy chủ sang người gọi trong mã phía máy khách (Với điều kiện bạn cần xác định các lớp Exception đó bên trong gói mã phía máy khách. GWT RPC sử dụng các cuộc gọi AJAX với giao thức tùy chỉnh của riêng họ để truyền dữ liệu.

    • Nếu bạn không muốn sử dụng GWT RPC, bạn có thể thực hiện các cuộc gọi AJAX của máy chủ để tìm nạp dữ liệu từ máy chủ bằng Trình tạo yêu cầu. Mà cũng dễ thực hiện hơn nhiều. Nó cũng có tính năng thú vị Request Factory. Với tính năng này, bạn có thể làm cho lớp DAO hoặc Dịch vụ của bạn được hiển thị để được gọi từ mã máy khách. Để làm điều đó, bạn cần xác định một vài bộ giao diện cho dịch vụ và loại dữ liệu tùy chỉnh của bạn. Và sử dụng các giao diện này, bạn có thể truy cập các dịch vụ đó từ mã máy khách. Tôi đã viết plugin maven để tạo các giao diện này. Nếu bạn chú thích lớp DAO của bạn với một số chú thích cần thiết, hãy tham khảo ( https://github.com/pandurangpatil/gwt-mvn-helper) tham khảo mô-đun mvn-helper-test bên trong nó để sử dụng. Request Factory được nhắm mục tiêu nhiều hơn để tích hợp với lớp ORM như JDO hoặc JPA trên máy chủ. Nó có một hỗ trợ để gọi liên tục trên thực thể nhất định từ mã máy khách. Và quan trọng nhất khi bạn gọi phương thức kiên trì, nó sẽ tính toán và chỉ gửi thay đổi (delta) đến máy chủ để lưu.

    • Nếu bạn muốn thực hiện cuộc gọi JSONP tên miền chéo, bạn có thể thực hiện cùng một tham chiếu.

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.