为什么我应该使用jQuery而不是GWT?

时间:2009-07-30 08:44:53

标签: javascript jquery gwt

我需要为我的新项目决定jQuery和GWT。

我还没有用JavaScript编程一段时间,过去几天我一直在研究GWT。它看起来非常棒,为不同的浏览器和所有浏览器生成所有不同的JS,但是:

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

我一直在为我的大多数项目使用jQuery而且非常好。

我想说服客户端jQuery更适合这个项目,我需要更多的参数来支持这个。

14 个答案:

答案 0 :(得分:63)

我会选择JQuery。

我曾经维持过一个GWT项目,最终迫使我重新写两次。首先作为重构的GWT应用程序,在JQuery中排名第二。

我很长时间没有认真对待Javascript。最后一次是2002年。我是一名Java开发人员,所以我对GWT的第一印象非常棒。但这只是印象。

我在GWT中发现的问题:

  1. 它强制您遵循其客户端/服务器结构。最后,我想要的是AJAX和那些优秀的小部件。 GWT的小部件本身看起来并不那么好看。在美学上,我更喜欢Adobe Flex!但为了使比较更接近,JQuery的UI看起来比GWT更好。此外,您还可以从JQuery获得精彩的Theme Roller支持。

  2. 我尝试过DWR。这很棒。使用DWR而不是GWT在Java代码中启用AJAX要容易得多。

  3. 如果你正在使用GWT,最终你将被迫学习JavaScript。 SpringSource的Arjen曾经说过XML和SOAP(虽然不是确切的引用):“你如何开发WebServices而不知道XML?SOAP就是XML。你无法避免它”。 GWT也是如此。它最终仍然是Javascript。

  4. 实际上,Javascript与Java相比并不难。更多人了解Javascript而不是Java。即便是网页设计师也知道。你是程序员,你害怕Javascript?

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

  6. 使用JQuery,您并不真正编写hardcorde JavaScript。这就是你首先使用JQuery的原因。使用GWT维护代码非常糟糕。你想看看你在代码中做的最新变化......去编译......等待GWT ... 5分钟...冲洗......并重复并希望它不会引发错误。如果是,您将再次重新编译,并等待另外5分钟。冲洗并重复。使用JQuery更改一行,刷新浏览器。完成。

  7. 我知道我在这里不客观,但我只是分享我的经验:)道德是不要害怕Javascript。谷歌无论如何都使用Javascript

答案 1 :(得分:56)

我建议将GWT用于那些不了解JavaScript但(或许)对Java更熟悉的团队。使用GWT,您可能会在兼容性测试中节省数天(如果不是几周),并且会避免很多新手入侵的common JavaScript pitfalls。 GWT还为CSS spritesembedded datamore提供了出色的打包功能。

但是,如果您了解并理解JavaScript,我会使用JavaScript ,无论您选择哪个库。虽然我没有机会过于仔细地检查GWT生成的代码,但我在Google I / O上看到了一些例子,虽然它看起来很糖果和闪光,但你可能会创建更优雅的JavaScript代码来实现这一目标。方式。

答案 2 :(得分:18)

如果您的小组最熟悉Java并且您计划进行大量客户端功能,那么您至少应该评估GWT。服务器端/客户端之间的类型安全,Eclipse调试和共享代码将让您的Java开发团队感到舒适。

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

生成的代码来自GWT的事实与大多数GWT开发人员的相关性较低。 GWT允许您将Java编译为等同于普通java * .class文件的东西,但是使用JavaScript语法,Web浏览器会理解如何解释。 GWT更像是编译器而不是模板驱动的代码生成器。有时您需要检查生成的代码,但大多数情况下,您的调试将通过Java调试器以Java形式进行。

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

答案 3 :(得分:15)

首先将GWT与jQuery进行比较没有多大意义。虽然构建jQuery是为了使跨浏览器更容易与DOM一起工作,但GWT是为了创建大型Web应用程序而构建的。

因此,如果你有一些带有一些独立小部件的静态方面,比如日历,滑块等,jQuery就足够了。如果你想构建单页面应用程序,也许是一个庞大的团队,GWT是更好的方法。 GWT有很多很好的设计架构,尤其是MVP模式的构建,UI-Binder模板系统,i18n支持等。

因此,当JavaScript开发人员在一个大型GWT应用程序上工作超过一年时,我建议永远不要仅使用jquery构建单个页面应用程序,因为它不是为其构建的。如果您想使用JavaScript,请查看主干,脊椎,淘汰赛或道场。

顺便说一下,构建GWT架构一样,你将有很多JAVA开销。因此,如果你的项目正在增长,那么编译你的css和i18n属性的时间会很烦人。

答案 4 :(得分:10)

  

“课程的马匹”

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

  • 时间紧,对其他人比较熟悉
  • 其他开发人员使用所选工具的速度和可维护性。一个人在另一个人中的普遍存在也可能会产生影响
  • 有任何可以在项目中使用的代码,例如插件,实用功能等。

如果不了解项目的具体内容,您的体验以及客户使用不同技术/框架的开放程度,那么这里就没有决定性的答案。

将这个引人注目的参数列表列在另一个上面,因为我已经从这里开始,然后与参与该项目的其他人讨论得出结论。

答案 5 :(得分:10)

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

GWT:

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

jQuery的:

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

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

答案 6 :(得分:4)

我同意Russ Cam的看法,这取决于你的团队熟悉的内容。当我为我的个人业务应用程序工作时,我更喜欢GWT。我发现javascript,即使使用jquery,也有令人讨厌的面向对象语法。如果你有一个包含10,000行UI代码的应用程序,那么jquery会让我感到困惑,因为这会导致难以维护的代码很难重复使用。

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

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

关于javascript / jquery与gwt的关系。如果您使用面向对象的通用原则和设计模式,那么使用gwt可能会获得更好的代码。为什么呢?

让我们以多态为例。如果你编写一个在javascript中使用重多态的应用程序,你将获得可提供的maintanability和代码重用的好处。但是,您的代码也会因使用多态而受到性能影响。

现在,如果你使用gwt,你也可以获得maintanability和代码重用的好处,但是gwt编译器会将多态性优化为具体的类使用,从而提高性能。

答案 7 :(得分:3)

我认为GWT太抽象了。 Javascript实际上是一种强大的语言。您可以编写面向对象的代码并使用命名空间。使用像jQuery这样的库,您不必担心大多数操作都会出现浏览器兼容性问题。现在,在所有主要浏览器中都可以使用所有优秀的浏览器开发工具(如Firebug),现在很容易使用javascript。当javascript错误发生时,我可以很容易地确定我的代码中发生了什么。我可以观察变量并详细了解所有正在进行的事情,因为我正在处理我写的代码(与GWT不同)。

答案 8 :(得分:3)

我在GWT与原生Javascript解决方案(jQuery或其他)中看到的主要问题是:

  • 还有一个额外的流程可以将您与最终产品区分开来。您使用Java开发应用程序并调试Java代码,但是您发布了此代码的机器翻译版本。对于一个体积适中的应用程序,我无法想象您有时不需要调试在浏览器上运行的实际代码,这将是一个令人头疼的问题,因为它不是您的代码。

  • 由于您使用Java编写代码,因此您只能使用Java库。如果你找到一些你喜欢的JS库,将它添加到你的GWT项目是非常困难的,你可能需要为它编写一个Java包装器。如果您正在开发本机JS,则只需将其添加到项目中即可。

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

  • 如果您考虑在移动平台上发布您的应用程序,那么本机JS应用程序可以轻松地包含在phonegap中,并且可以访问多个移动平台,而无需额外的努力。还有一个GWT的手机封装包装,但回到我的第一个项目,如果您可以选择使用真实的东西,那么为什么选择需要翻译/仿真的解决方案呢?

祝你好运。

答案 9 :(得分:2)

jQuery =低级别理解

除了正常的一个javascript,另一个是java解释,Jquery与javascript有一个更接近的一对一映射,而GWT更抽象。因此,如果您希望更深入地了解代码在低级别(javascript)发生的情况,那么jquery是正确的方法。

GWT =抽象理解=功能保证

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

低级别理解可能更有用

就个人而言,我自己对低级别的编码感到非常满意。我已经在纯粹的javascript中构建了一些Web应用程序,它们运行完美。一旦编写了从数据库中获取数据并生成完整的Microsoft Word研究报告的javascript代码。该项目的复杂性要求对javascript进行较低级别的掌握。我不确定这可以通过基于java的解决方案轻松完成。

GWT向管理人员保证,但成本高昂

然而再次java和asp.net往往更受大公司的青睐b / c有更多的技术支持(即甲骨文和微软)和紧张的边缘管理人员在他们知道他们知道他们时会在晚上睡得更好只需支付x金额的支持即可解决问题A.因此,在采用该系统后,他们很快就会意识到技术支持成本太高,为更好的开发人员支付更多费用更便宜。因此,java或.net职业通常会将食物放在桌面上。

<强>可维护性

API也像GWT一样容易维护。我只能想象如果他们必须调试我的javascript代码,有人会经历的恐怖。但那是在我成为一个更好更清洁的程序员之前,因为我知道代码的每个方面都没有什么可以调试b / c从来没有问题。

低级编码让您几乎100%了解正在发生的事情,但是使用API​​,您可以花时间在Google上玩bug侦测并在StackOverflow等网站上发布问题。但是管理者并不理解这个b / c大部分都不是程序员。

答案 10 :(得分:2)

所有伟大的提示,没有人谈到JSNI! GWT中的一项功能,允许您根据需要使用javascript。

https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI

答案 11 :(得分:1)

GWT是一个编译器(Java到JavaScript),jQuery是一个框架。您不必选择其中一个。你可以使用其中一种,两种都不使用。

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

活跃的用户群和最近获得的人气明确表明jQuery是胜利者。