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

我需要为我的新项目在jQuery和GWT之间做出决定。

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

  • 用Java开发需要的时间比使用jQuery的同样的东西(至less在这个项目中)
  • 文档很差(例如,我应该如何知道在devise页面时应该使用哪些元素? – 没有足够的文档)

我一直在使用jQuery的大部分项目,这是相当不错的。

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

我会去与JQuery。

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

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

我用GWT发现的问题:

  1. 它迫使你遵循它的客户/服务器结构。 最后,我想要的是AJAX和那些好的小部件。 GWT的小部件本身并不好看。 美学上,我更喜欢Adobe Flex! 但为了保持比较接近,JQuery的UI看起来比GWT好。 另外,您还可以从JQuery获得精彩的主题滚动支持。

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

  3. 如果你使用GWT,最终你将被迫学习JavaScript。 SpringSource的Arjen曾经谈到XML和SOAP(虽然不是确切的引用):“你怎么开发WebServices而不懂XML?SOAP是XML,你无法避免它。 与GWT同样的事情。 最后还是Javascript。

  4. 实际上,Javascript并不是很难与Java学习。 更多的人比Java更懂Javascript。 即使是网页devise师也知道。 你是程序员,你害怕Javascript?

  5. 回到我重写的项目。 当我重写了我们的GWT应用程序,我花了将近两个月的时间来重写它。 有了JQuery,我花了两周的时间,用JavaScript来生锈。

  6. 使用JQuery,你不会真正写出hardcorde JavaScript。 这就是为什么你首先使用JQuery。 用GWT维护代码是非常糟糕的。 你想看看你在代码中做的最新的变化…去编译…等待GWT … 5分钟…冲洗…并重复,并希望它不会抛出一个错误。 如果是的话,你会重新编译,再等5分钟。 冲洗并重复。 用JQuery改变一行,刷新浏览器。 完成。

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

我build议使用GWT与那些不懂JavaScript的人一起工作的团队,但是他们可能会更习惯Java。 使用GWT,如果不是兼容性testing,你可能会为自己节省几天的时间,并且可以避免人们对语言新手粉碎的许多常见的JavaScript缺陷 。 GWT还具有CSS精灵 , embedded数据 等等的优秀包装function。

但是, 如果您了解和理解JavaScript,那么无论您select什么样的库,都可以使用JavaScript 。 尽pipe我没有机会仔细检查GWT生成的代码,但是我在Google I / O中看到了一些示例,虽然它看起来全是糖果和火花,但您可能会创build更优雅的JavaScript代码办法。

如果你的团队最熟悉Java,而你打算做大量的客户端function,那么你至less应该评估一下GWT。 types安全性,Eclipsedebugging和服务器端/客户端之间的共享代码将让您的Java开发团队感到舒适。

但是,如果您的团队习惯于使用jQuery或其他JavaScript库进行JavaScript编程,那么坚持使用纯JavaScript的技术可能会更容易一些。 GWT有一种接pipe大部分页面的方法,这对大多数JavaScript开发人员来说是陌生的。 通过接pipe页面,我的意思是说,典型的GWT代码喜欢创build自己的DOM元素,而不是向页面上的现有元素添加function。 这就是为什么许多GWT应用程序页面第一次加载时有一个“加载…”屏幕。 这是没有必要的,但它是GWT发展中最常见的风格。

生成的代码来自GWT的事实与大多数GWT开发人员不太相关。 GWT允许你将Java编译成相当于普通java * .class文件的东西,但使用JavaScript语法,Web浏览器可以理解如何解释。 与模板驱动的代码生成器相比,GWT更像编译器。 有时候您需要检查生成的代码,但是大部分情况下,您的debugging将通过Javadebugging程序以Java方式进行。

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

首先比较GWT和jQuery没什么意义。 尽pipe构buildjQuery是为了使跨浏览器更易于使用DOM,但构buildGWT以创build大型Web应用程序。

所以如果你有一些独立的小部件,如日历,滑块等静态的一面,jQuery就够了。 如果你想build立单页面的应用程序,也许有一个大团队,GWT是更好的方法。 GWT有很多很好的devise架构,特别是在MVP模式,UI-Binder模板系统,国际化支持等方面的构build。

所以作为JavaScript开发人员在一个大的GWT应用程序上工作了一年多,我会build议永远不要只用jquery构build一个单一的页面应用程序,因为它不是为了构build。 如果你想使用JavaScript看看骨干,脊椎,淘汰赛或道场。

顺便说一句,GWT体系结构的构build,你将有很多的JAVA开销。 所以如果你的项目越来越多,编译你的css和i18n属性的时间就会变得烦人。

“课程马”

select哪一个最有意义的项目。 有些事情要考虑

  • 时间紧迫,比较熟悉
  • 其他开发人员使用所选工具的速度和可维护性。 一个在另一个之上的stream行也可能在这里有影响
  • 有任何可以在项目中使用的代码,例如插件,实用程序function等

如果不知道项目的具体内容,你的经验是什么以及客户如何使用不同的技术/框架,这里就不会有决定性的答案。

把这个引人注目的论点列出来,就像我从这里开始,然后和其他参与项目的人讨论一下。

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

GWT:

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

jQuery的:

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

就个人而言,我会build议大多数项目的GWT,但jQuery也有优点,有些人可能更喜欢jQuery。

我同意Russ Cam的看法,这取决于你的团队熟悉什么。 当我为我的个人业务应用程序工作时,我更喜欢GWT。 我发现JavaScript,即使使用jQuery,也会产生烦人的面向对象的语法。 如果你有一个拥有10,000行UI代码的应用程序,jquery会让我觉得很难保持代码的重用性。

有没有人知道在jQuery中完成的大型项目?

我想如果你正在试图从结果文件大小中挤出每一个字节,不要使用任何库,从头开始编写javascript(即:google主页淡入淡出效果)。

关于JavaScript / jquery和gwt的一些想法。 如果你使用通用的面向对象的原则和devise模式,你可能会得到更好的代码与gwt。 为什么?

我们来看一下多态的例子。 如果你编写一个在JavaScript中使用重型多态的应用程序,你将会得到这个提供的重要性和代码重用的好处。 但是,您的代码也将获得使用多态性的性能。

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

我认为GWT是太抽象了。 Javascript实际上是一个强大的语言。 您可以编写面向对象的代码并使用名称空间。 像jQuery这样的库,你不用担心浏览器兼容性问题。 现在,所有主stream浏览器都提供了所有优秀的浏览器开发工具(如Firebug),使用JavaScript工作非常简单。 当一个JavaScript错误发生时,我可以很容易地find它在我的代码中发生的地方。 我可以观察variables并详细了解所有这些,因为我正在对付我写的代码(与GWT不同)。

我看到GWT与本地Javascript解决scheme(jQuery或其他)的主要问题是:

  • 还有一个额外的stream程将您从最终产品中分离出来。 你用Java开发你的应用程序,然后debuggingJava代码,然后你就发布这个代码的机器翻译版本。 对于一个体积适中的应用程序,我无法想象你不需要debugging在浏览器上运行的实际代码,这将是一个头痛的问题,因为它不是你的代码。

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

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

  • 如果您可能考虑在移动平台上发布您的应用程序,那么原生JS应用程序可以很容易地被封装在phonegap中,并且可以访问多个移动平台,而无需额外的工作。 还有一个用于phonegap的GWT包装,但回到我的第一个项目,如果你有select使用真实的东西,那么为什么select一个解决scheme,需要翻译/仿真?

祝你好运。

所有的伟大提示,没有人谈到JSNI! GWT中的一个function,可以让你使用JavaScript,如果你愿意。

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

jQuery =低级理解

除了正常的一个JavaScript和另一个是java的解释,jquery有一个更接近一对一的JavaScript映射,而GWT更抽象。 所以,如果你想更深入地了解你的代码在底层(javascript)发生了什么,那么jquery是正确的。

GWT =抽象理解=function保证

GWT提供了编译器生成的代码的优点,所以它可以提供更多的保证,您的网站将正常运行。 然而就像任何大规模的API,你需要花时间去理解这个类是做什么的,这个类做了什么,它是否与这个API兼容。

低层次的理解可能会更有用

就个人而言,我从自己的低级代码中获得更多的满足感。 我已经build立了一些在纯JavaScript工作的Web应用程序,完美地运作。 一旦写了JavaScript代码,从数据库中取出数据,并生成一个完整的微软字研究报告。 这个项目的复杂性要求对javascript有较低的把握。 我不确定这可以用基于Java的解决scheme轻松完成。

GWT让pipe理人员放心,但成本高昂

但是,再次,java和asp.net更倾向于大公司B / C有更多的技术支持(如甲骨文和微软),紧张的边缘经理倾向于在晚上得到更好的睡眠,当他们知道他们可以解决问题一个只需支付x美元的支持。 所以在采用这个系统之后,他们很快就意识到技术支持成本太高,为更好的开发者付出更多的代价是更便宜的。 因此,java或.net职业通常会把食物放在桌子上。

可维护性

此外,API的GWT更容易维护。 我只能想象如果他们必须debugging我的JavaScript代码,有人会经历的恐怖。 但那是在我成为一个更好,更干净的程序员之前,因为我知道代码的每一个方面,没有什么可以debugging的B / C从来没有问题。

低级代码可以让你几乎百分之百地了解发生了什么事情,但是使用API​​你可以花时间在谷歌上玩虫子侦探并在StackOverflow等网站上发布问题。 但pipe理人员不明白这个B / C大多数不是程序员。

GWT是一个编译器(Java to JavaScript),jQuery是一个框架。 你不必select一个。 你可以使用其中之一,也可以不使用。

例如,如果你想要或现有的源代码,你可以在Java代码,然后使用jQuery的其他东西。 有可用的包装,但GWT可以调用JavaScript(反之亦然),请参阅http://svenbuschbeck.net/wordpress/2012/06/how-to-use-jquery-in-gwt/

我个人的意见将为jQuery,但那是因为我从来没有使用Java,真的喜欢使用jQuery插件。

活跃的用户群和最近的stream行清楚地表明jQuery是赢家。