我需要为新项目在jQuery和GWT之间做出选择。
我有一段时间没有使用JavaScript编程了,最近几天一直在研究GWT。它看起来很棒,可以为不同的浏览器和所有浏览器生成所有不同的JS,但是:
- 用Java开发比使用jQuery花费更多的时间(至少对于这个项目而言)
- 文档很差(例如,在设计页面时我应该如何知道应该使用哪些元素?-没有足够的文档用于此)
我在大多数项目中一直使用jQuery,这非常好。
我想说服客户jQuery更适合此项目,并且我需要更多参数来支持它。
我需要为新项目在jQuery和GWT之间做出选择。
我有一段时间没有使用JavaScript编程了,最近几天一直在研究GWT。它看起来很棒,可以为不同的浏览器和所有浏览器生成所有不同的JS,但是:
我在大多数项目中一直使用jQuery,这非常好。
我想说服客户jQuery更适合此项目,并且我需要更多参数来支持它。
Answers:
我会选择JQuery。
我曾经维护过一个GWT项目,最终迫使我重写了两次。首先是重构的GWT应用程序,其次是JQuery。
我已经很长时间没有认真接触过Javascript了。上一次是在2002年左右。我是一名Java开发人员,所以我对GWT的第一印象非常棒。但这仅仅是印象。
我发现的GWT问题:
它迫使您遵循其客户端/服务器结构。最后,我想要的只是AJAX和那些出色的小部件。GWT的小部件本身看起来并不好看。从美学上讲,我更喜欢Adobe Flex!但是为了使比较更加紧密,JQuery的UI看起来比GWT的UI好。此外,您还从JQuery获得了出色的Theme Roller支持。
我已经尝试过DWR。这很棒。使用DWR在Java代码中启用AJAX比使用GWT容易得多。
如果您使用的是GWT,最终您将被迫学习JavaScript。SpringSource的Arjen曾经谈到过XML和SOAP(尽管引用不准确):“如何开发WebServices而又不了解XML?SOAP是XML。您无法避免。” 与GWT相同。最后仍然是Javascript。
实际上,与Java相比,Java并不难学习。比Java更了解Java的人。甚至网页设计师也知道这一点。您是一名程序员,并且害怕Java语言吗?
回到我重写的项目。当我重写GWT应用程序时,我花了将近两个月的时间来重写它。使用JQuery,我花了两个星期的时间,而我对JavaScript感到生疏。
使用JQuery,您实际上并不需要编写硬编码的JavaScript。这就是为什么首先使用JQuery的原因。用GWT维护代码是可怕的。您想查看您在代码中所做的最新更改...进行编译...等待GWT ... 5分钟...冲洗...然后重复,并希望它不会引发错误。如果是这样,您将再次重新编译,并等待另外5分钟。冲洗并重复。使用JQuery更改行,刷新浏览器。做完了
我知道我在这里不是很客观,但是我只是在分享我的经验:)道德不怕Java。Google仍会使用Javascript
我建议将GWT用于不了解JavaScript但(可能)更熟悉Java的团队。使用GWT,您可能会节省数天(如果不是几周)的兼容性测试,并且可以避免使用该语言的人们陷入的很多常见JavaScript陷阱。GWT也有大包装的功能CSS精灵,嵌入式数据,以及更多。
但是,如果您了解并理解JavaScript,无论您选择哪种库,我都会使用JavaScript。尽管我没有机会仔细检查GWT生成的代码,但我在Google I / O上看到了一些示例,尽管看起来很像糖果,但您可能会创建更优雅的JavaScript代码,就像以前一样道路。
如果您的团队最熟悉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环境中编写客户端代码,但是它并不能掩盖您正在浏览器中工作的事实。
首先,将GWT与jQuery进行比较没有多大意义。构建jQuery使跨浏览器更轻松地使用DOM时,构建GWT的目的是创建大型Web应用程序。
因此,如果您有一堆带有一些独立小部件(例如日历,滑块等)的静态元素,那么jQuery就足够了。如果您想构建单个页面的应用程序,也许需要一个庞大的团队,那么GWT是更好的方法。GWT在引擎盖下有很多设计架构,尤其是MVP模式的构建,UI-Binder模板系统,i18n支持等。
因此,由于JavaScript开发人员在大型GWT应用程序上工作了一年以上,因此我建议您永远不要只使用jquery来构建单页应用程序,因为它不是为此而构建的。如果您想使用JavaScript,请看一下骨干,脊椎,敲除或道场。
顺便说一句,尽管构建了GWT架构,但您将有许多JAVA开销。因此,如果您的项目正在增长,那么编译css和i18n属性的时间将变得很烦人。
答案并不容易。答案是“取决于”:
GWT:
jQuery的:
我个人会为大多数项目推荐GWT,但是jQuery也有优点,有些人可能更喜欢jQuery。
我同意Russ Cam的观点,这取决于您的团队熟悉什么。当我为个人商务应用程序工作时,我更喜欢GWT。我发现即使使用jquery的javascript也具有令人讨厌的面向对象语法。如果您的应用程序具有10,000行UI代码,那么jquery会给我留下深刻的印象,因为这会导致难以维护的代码混乱,并且复用性差。
有谁知道在jquery中完成的大型项目?
我认为,如果您尝试从结果文件大小中挤出每个最后一个字节,请不要使用任何库并从头开始编写javascript(即:google主页淡入淡出效果)。
关于javascript / jquery和gwt的一些思考。如果您使用通用的面向对象的原理和设计模式,则使用gwt可能会获得更好的性能。为什么?
让我们以多态为例。如果您编写的应用程序在javascript中使用了严重的多态性,那么您将获得可维护性和代码重用的好处。但是,您的代码也将获得使用多态性的性能优势。
现在,如果您使用了gwt,您还将获得提供的可维护性和代码重用的好处,但是gwt编译器会将多态性优化为具体的类用法,从而提高了性能。
与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包装器,但是回到我的第一篇文章,如果您可以选择使用真实的东西,那么为什么选择需要翻译/仿真的解决方案呢?
祝好运。
所有很棒的技巧,没有人谈到JSNI!GWT中的一项功能,允许您根据需要使用javascript。
https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI
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等网站上发布问题。但是,经理不了解这个条件,大多数不是程序员。
GWT是编译器(Java到JavaScript),而jQuery是框架。您不必选择一个。您可以使用它们之一,或者两者都使用。
例如,您可以使用Java进行编码,或者拥有现有的源代码,然后将jQuery用于其他内容。有可用的包装器,但是GWT可以调用JavaScript(反之亦然),请参见http://svenbuschbeck.net/wordpress/2012/06/how-to-use-jquery-in-gwt/
活跃的用户群和最近越来越流行的趋势清楚地表明jQuery是赢家。