为什么我应该使用jQuery而不是GWT?[关闭]


75

我需要为新项目在jQuery和GWT之间做出选择。

我有一段时间没有使用JavaScript编程了,最近几天一直在研究GWT。它看起来很棒,可以为不同的浏览器和所有浏览器生成所有不同的JS,但是:

  • 用Java开发比使用jQuery花费更多的时间(至少对于这个项目而言)
  • 文档很差(例如,在设计页面时我应该如何知道应该使用哪些元素?-没有足够的文档用于此)

我在大多数项目中一直使用jQuery,这非常好。

我想说服客户jQuery更适合此项目,并且我需要更多参数来支持它。


13
gwt使用Java并生成html + javascript
BobiYo

1
我认为他的意思是Java-用Java编写代码,GWT将为客户端生成适当的JavaScript。参见code.google.com/webtoolkit/overview.html
拉斯·卡姆

@Chris GWT使开发人员用Java编写代码,然后在处理请求时以特定浏览器类型的Java javascript形式提供Java
AutomatedTester,2009年

好的,很抱歉您对Java / JavaScript注释不满意。Boban,如果您使用的是gwt生成html + javascript,那么我不确定jQuery是否可以替代gwt。有人可以对此进行纠正吗?还是我错过了要点?
克里斯·尼科尔

的确不能将两者进行比较,因为它们都有不同的概念,我个人喜欢在项目中使用jQuery,但除了论点,使用gwt进行开发所需的时间比使用jQuery所需的时间还要多(100%肯定对于这个项目),我需要提出更多的论点:)。感谢您对此事的关注,克里斯。
BobiYo

Answers:


63

我会选择JQuery。

我曾经维护过一个GWT项目,最终迫使我重写了两次。首先是重构的GWT应用程序,其次是JQuery。

我已经很长时间没有认真接触过Javascript了。上一次是在2002年左右。我是一名Java开发人员,所以我对GWT的第一印象非常棒。但这仅仅是印象。

我发现的GWT问题:

  1. 它迫使您遵循其客户端/服务器结构。最后,我想要的只是AJAX和那些出色的小部件。GWT的小部件本身看起来并不好看。从美学上讲,我更喜欢Adobe Flex!但是为了使比较更加紧密,JQuery的UI看起来比GWT的UI好。此外,您还从JQuery获得了出色的Theme Roller支持。

  2. 我已经尝试过DWR。这很棒。使用DWR在Java代码中启用AJAX比使用GWT容易得多。

  3. 如果您使用的是GWT,最终您将被迫学习JavaScript。SpringSource的Arjen曾经谈到过XML和SOAP(尽管引用不准确):“如何开发WebServices而又不了解XML?SOAP是XML。您无法避免。” 与GWT相同。最后仍然是Javascript。

  4. 实际上,与Java相比,Java并不难学习。比Java更了解Java的人。甚至网页设计师也知道这一点。您是一名程序员,并且害怕Java语言吗?

  5. 回到我重写的项目。当我重写GWT应用程序时,我花了将近两个月的时间来重写它。使用JQuery,我花了两个星期的时间,而我对JavaScript感到生疏。

  6. 使用JQuery,您实际上并不需要编写硬编码的JavaScript。这就是为什么首先使用JQuery的原因。用GWT维护代码是可怕的。您想查看您在代码中所做的最新更改...进行编译...等待GWT ... 5分钟...冲洗...然后重复,并希望它不会引发错误。如果是这样,您将再次重新编译,并等待另外5分钟。冲洗并重复。使用JQuery更改行,刷新浏览器。做完了

我知道我在这里不是很客观,但是我只是在分享我的经验:)道德不怕Java。Google仍会使用Javascript


1
我只需要编译一次即可,如果我有任何更新,请不断刷新网页:D
Chan Le

3
克里斯-您看过GWT 2. *吗?这个版本会让您提到的内容变得更好吗?

2
无论使用哪种语言,您都可能会觉得需要重写任何应用程序(很难将其归咎于GWT)。我发现有些Java应用程序甚至Web应用程序我希望重写是因为它们编写得不好,而不仅仅是因为它是Java。这并不意味着应该归咎于Java,而是Java代码的原始编写者。我同意占用太多时间的编译时间问题。同样,如果您的开发人员没有纪律,那么编写大量JavaScript可能会导致代码难以维护。
罗坦

9
我将GWT与Maven一起使用,这使我只能在对服务器端进行更改时才编译应用程序的服务器端。而且,当我仅在客户端进行更改时,GWT调试器会立即反映这些更改..因此,我只有等待5分钟才能使GWT编译器完成运行的唯一时间是当我进行影响客户端和客户端的修改时服务器端,例如添加新的RPC服务,这种情况只有在开发的开始和之后才偶尔发生。因此,我可以说调试GWT并非您所描述的那样。
雷纳托

1
对于JAVA开发人员而言,有时似乎是个不错的选择,GWT的编译时间很长,而Java代码中的调试却很困难,而在GWT中发现错误是一件大事,目前我们正在起诉GWT是我们的项目之一,它对我们很好仍然,例如复杂的GRID仍在帮助我们,但是特定的结构根本不适合开发人员使用,某些GWT小部件一点也不强大,我们将GXT和GWT混合使用以获得更好的外观,GWT的外观一点也不令人信服,因此我们GXT + GWT + Smart GWT混合进行锻炼,但是我认为这将导致我们出现问题的代码可维护性
2013年

56

我建议将GWT用于不了解JavaScript但(可能)更熟悉Java的团队。使用GWT,您可能会节省数天(如果不是几周)的兼容性测试,并且可以避免使用该语言的人们陷入的很多常见JavaScript陷阱。GWT也有大包装的功能CSS精灵嵌入式数据,以及更多

但是,如果您了解并理解JavaScript,无论您选择哪种库,我都会使用JavaScript。尽管我没有机会仔细检查GWT生成的代码,但我在Google I / O上看到了一些示例,尽管看起来很像糖果,但您可能会创建更优雅的JavaScript代码,就像以前一样道路。


1
我最近在这个主题上发布了:phiz.posterous.com/gwt-its-not-you-its-me
AlexJReid,2009年

22
您不调试Java代码,而是调试Java代码。
Alberto Zaccagni'1

1
@Alberto,我不认为Justin的意思是像您指出的那样。他的意思是更一般的意思是“调试”。
克里斯,2010年

1
我有一个相对复杂的GWT项目,并且无需接触javascript就可以启动并运行。这要归功于Google和GXT。
Jorel 2011年

1
@Espen除了现在它是GWT(不一定坏也不一定好)之外,您仍然受某些限制。
贾斯汀·约翰逊

18

如果您的团队最熟悉Java,并且打算做大量的客户端功能,那么您至少应该评估GWT。Java开发团队会感到类型安全,Eclipse调试和服务器端/客户端之间的共享代码。

但是,如果您的团队习惯于使用jQuery或其他JavaScript库进行JavaScript编程,那么坚持使用纯JavaScript技术可能会更容易。GWT可以接管页面的大部分内容,这是大多数JavaScript开发人员都不熟悉的。通过接管页面,我的意思是典型的GWT代码喜欢创建自己的DOM元素,而不是向页面上的现有Elements添加功能。这就是为什么许多GWT应用程序在页面首次加载时都显示“正在加载...”屏幕的原因。这不是必需的,但这是GWT开发中最常见的样式。

生成的代码来自GWT的事实与大多数GWT开发人员无关。GWT允许您将Java编译为等效于普通Java * .class文件的内容,但使用Web浏览器可以理解的JavaScript语法进行解释。与模板驱动的代码生成器相比,GWT的行为更像是编译器。有时,您需要检查生成的代码,但是在大多数情况下,调试将通过Java调试器在Java中进行。

要考虑的另一件事是,无论您选择哪种客户端技术,您的开发团队都将需要大致熟悉HTML,JavaScript,CSS和浏览器编程。GWT使您可以在熟悉的Java环境中编写客户端代码,但是它并不能掩盖您正在浏览器中工作的事实。


15

首先,将GWT与jQuery进行比较没有多大意义。构建jQuery使跨浏览器更轻松地使用DOM时,构建GWT的目的是创建大型Web应用程序。

因此,如果您有一堆带有一些独立小部件(例如日历,滑块等)的静态元素,那么jQuery就足够了。如果您想构建单个页面的应用程序,也许需要一个庞大的团队,那么GWT是更好的方法。GWT在引擎盖下有很多设计架构,尤其是MVP模式的构建,UI-Binder模板系统,i18n支持等。

因此,由于JavaScript开发人员在大型GWT应用程序上工作了一年以上,因此我建议您永远不要只使用jquery来构建单页应用程序,因为它不是为此而构建的。如果您想使用JavaScript,请看一下骨干,脊椎,敲除或道场。

顺便说一句,尽管构建了GWT架构,但您将有许多JAVA开销。因此,如果您的项目正在增长,那么编译css和i18n属性的时间将变得很烦人。


1
Enyo是用于构建应用程序的一个不错的JS框架,它比主干程序敲除功能更全面。
2013年

10

“课程的马”

选择对项目最有意义的一个。要考虑的一些事情

  • 时间紧迫,彼此比较熟悉
  • 其他开发人员使用所选工具的速度和可维护性。一个人比另一个人的患病率也可能在这里产生影响
  • 具有项目中已经可以使用的任何代码,例如插件,实用程序功能等。

如果不了解有关项目内容,您的经验以及客户使用不同技术/框架的开放程度的详细信息,这里将没有确定的答案。

正如我从此处开始的,然后列出令人信服的论点,然后与参与该项目的其他人进行讨论以得出结论。


10

答案并不容易。答案是“取决于”:

GWT:

  • 如果您知道并喜欢Java
  • 如果您的服务器代码也是用Java编写的,则用Java编写客户端代码可以在客户端和服务器上使用相同的代码
  • 如果您喜欢强类型语言提供的功能:编译时类型检查,自动重构,自动代码生成(Eclipse中的Ctrl + 1),代码完成(Ctrl + Space)
  • 如果您喜欢面向组件的编程(例如MenuBar创建菜单)
  • 如果GWT的复杂度(与jQuery相比)对您来说不是问题
  • 如果生成的大代码对您来说不是问题

jQuery的:

  • 如果您知道并喜欢JavaScript
  • 您无需在客户端和服务器上使用相同的代码(例如,客户端-JS,服务器-Java或PHP)
  • 如果您不需要编译时类型检查,自动重构等
  • 如果不需要面向组件的编程(要在jQuery中创建复杂的组件,则需要创建一系列div,然后调用$(“ those divs”)。makeXXXXControl())
  • 如果您喜欢简单(jQuery比GWT更简单)
  • 如果您需要非常小的代码(例如,使网站加载速度更快)

我个人会为大多数项目推荐GWT,但是jQuery也有优点,有些人可能更喜欢jQuery。


3

我同意Russ Cam的观点,这取决于您的团队熟悉什么。当我为个人商务应用程序工作时,我更喜欢GWT。我发现即使使用jquery的javascript也具有令人讨厌的面向对象语法。如果您的应用程序具有10,000行UI代码,那么jquery会给我留下深刻的印象,因为这会导致难以维护的代码混乱,并且复用性差。

有谁知道在jquery中完成的大型项目?

我认为,如果您尝试从结果文件大小中挤出每个最后一个字节,请不要使用任何库并从头开始编写javascript(即:google主页淡入淡出效果)。

关于javascript / jquery和gwt的一些思考。如果您使用通用的面向对象的原理和设计模式,则使用gwt可能会获得更好的性能。为什么?

让我们以多态为例。如果您编写的应用程序在javascript中使用了严重的多态性,那么您将获得可维护性和代码重用的好处。但是,您的代码也将获得使用多态性的性能优势。

现在,如果您使用了gwt,您还将获得提供的可维护性和代码重用的好处,但是gwt编译器会将多态性优化为具体的类用法,从而提高了性能。


3
一些使用jQuery / Vanilla Javascript的大型项目:Gmail,Google Reader,Google Maps,Grupon,Shopify,Facebook ...问题只是要知道如何使用Javascript。并且您应该将Backbone / Knockout / Angular与GWT进行比较,而不是将GWT与jQuery进行比较。
Celso Dantas

3

我认为GWT太抽象了。Javascript实际上是一种功能强大的语言。您可以编写面向对象的代码并使用名称空间。使用jQuery之类的库,您不必为大多数工作担心浏览器兼容性问题。如今,随着所有主要浏览器中所有出色的浏览器开发人员工具(例如Firebug)的推出,使用javascript变得非常容易。当发生JavaScript错误时,我可以轻松查明代码中发生的位置。我可以观察变量并了解所有详细信息,因为我正在反对编写的代码(与GWT不同)。


3

与GWT和本机Javascript解决方案(jQuery或其他)相比,我看到的主要问题是:

  • 还有一个附加过程可将您与最终产品区分开。您使用Java开发应用程序并调试Java代码,但仍发布了该代码的机器翻译版本。对于大小合适的应用程序,我无法想象您不需要调试浏览器上有时运行的实际代码,这将是一件令人头疼的事情,因为它不是您的代码。

  • 由于您使用Java编写代码,因此只能使用Java库。如果您发现很难将其添加到GWT项目中的某些JS库,则可能需要为其编写Java包装器。如果您正在开发本机JS,则可以将其添加到您的项目中。

  • JS本身就是一种很棒的语言,它的固态对象模型不同于Java。我已经为HP webOS在原生JS中开发了一些应用程序,但很惊讶地发现我对这种语言的许多先入之见并不真实。您可以在JS中用Java编写尽可能多的干净,高效和可维护的代码,并且如果您花时间了解JS对象模型,您甚至不需要使用支持库来模仿更典型的类/对象。像JS之上的Java和C ++这样的模型。Javascript的原型非常酷。

  • 如果您曾经考虑过在移动平台上发布您的应用程序,则可以轻松地将本机JS应用程序包装在phonegap中,并可以访问多个移动平台,而无需付出额外的努力。还有一个用于电话间隔的GWT包装器,但是回到我的第一篇文章,如果您可以选择使用真实的东西,那么为什么选择需要翻译/仿真的解决方案呢?

祝好运。


4
这就是为什么我们用机器代码编写应用程序的原因
JaroslavZáruba2012年


2

jQuery =低级理解

除了普通的一种javascript之外,另一种是java解释,Jquery与javascript具有更紧密的一对一映射,而GWT更抽象。因此,如果您希望对底层代码(javascript)的代码进行更深入的了解,那么jquery是正确的方法。

GWT =抽象理解=功能保证

GWT具有编译器生成代码的优势,因此可以为您的网站正常运行提供更多保证。但是,像任何大型API一样,您需要花些时间来了解此类的功能,该类的功能以及它是否与该API兼容。

低层次的理解可能更有用

就个人而言,我对底层用户进行编码后获得了更多的满意。我已经使用功能完善的纯JavaScript构建了一些Web应用程序。一旦编写了JavaScript代码,该代码就从数据库中获取数据并生成了完整的Microsoft Word研究报告。这个项目的复杂性要求对JavaScript的较低层次的了解。我不确定这是否可以通过基于Java的解决方案轻松完成。

GWT让经理们放心但代价高昂

但是话又说回来,java和asp.net往往会被大型公司b / c所青睐,因为它们拥有更大的技术支持(例如Oracle和Microsoft),而精神饱满的前沿管理者则在夜间知道他们可以解决问题时,往往会在晚上睡个好觉。 A只需支付x金额的支持费。因此,在采用该系统之后,他们很快就开始意识到技术支持的成本太高了,为更好的开发人员付出更多的代价更便宜。因此,java或.net的职业通常会把食物摆在桌面上。

可维护性

同样,像GWT这样的API也更易于维护。我只能想象如果有人不得不调试我的javascript代码会经历的恐怖。但是那是在我成为一个更好,更干净的程序员之前,并且因为我知道代码的每个方面,所以没有什么可以调试b / c的,所以从来没有问题。

低级编码可让您几乎100%地了解正在发生的事情,但是使用API​​时,您会花费时间在Google上进行侦错,并在StackOverflow等网站上发布问题。但是,经理不了解这个条件,大多数不是程序员。


6
确实,您需要学习如何分段。
Kirk Woll

1
@KirkWoll完成!请随时纠正/改善段落标题...(我不是user922475,原始作者)干杯;)
oHo,2013年

1

GWT是编译器(Java到JavaScript),而jQuery是框架。您不必选择一个。您可以使用它们之一,或者两者都使用。

例如,您可以使用Java进行编码,或者拥有现有的源代码,然后将jQuery用于其他内容。有可用的包装器,但是GWT可以调用JavaScript(反之亦然),请参见http://svenbuschbeck.net/wordpress/2012/06/how-to-use-jquery-in-gwt/


0

我个人的想法是使用jQuery,但是那是因为我从不使用Java,而是非常喜欢使用jQuery插件。


0

活跃的用户群和最近越来越流行的趋势清楚地表明jQuery是赢家。


1
这取决于您的工作-没有一个大小适合所有库。jQuery非常适合逐步增强现有的标记页面,而gwt则用于在浏览器中构建复杂的大规模应用程序UI。您可能会发现很难使用jquery制作Google Wave客户端UI。
CHII

7
Php也是赢家,但这并不意味着我们应该使用它
Roch 2010年

1
那么PHP一定是世界上最好的东西
JaroslavZáruba2012年

这取决于具体情况
Forhad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.