我需要在jQuery和GWT之间为我的新项目做出决定。
我有一段时间没有使用JavaScript编程了,最近几天一直在研究GWT。它看起来非常棒,能够生成不同浏览器下的所有JS代码,但是:
- 使用Java进行开发比使用jQuery更耗时(至少对于这个项目而言)
- 文档质量较差(例如,在设计页面时应该使用哪些元素?-没有足够的文档说明)
我大多数项目都使用jQuery,效果还不错。
我想说服客户选择jQuery更适合这个项目,需要更多支持的论据。
我需要在jQuery和GWT之间为我的新项目做出决定。
我有一段时间没有使用JavaScript编程了,最近几天一直在研究GWT。它看起来非常棒,能够生成不同浏览器下的所有JS代码,但是:
我大多数项目都使用jQuery,效果还不错。
我想说服客户选择jQuery更适合这个项目,需要更多支持的论据。
我建议使用JQuery。
曾经有一个GWT项目让我不得不重写两次。首先是作为重构后的GWT应用程序,其次是使用JQuery。我已经很久没有认真接触过JavaScript了。上一次是在2002年左右。我是一个Java开发人员,所以我对GWT的第一印象非常好。但那只是印象而已。
我发现GWT存在以下问题:
它强制要求你遵循其客户端/服务器结构。最终,我只需要AJAX和那些好的小部件。单独看GWT的小部件并不好看。从美学上讲,我更喜欢Adobe Flex!但为了更好地比较,JQuery的UI比GWT的好看。此外,JQuery还有那个Wonderful Theme Roller支持。
我尝试过DWR。它很棒。使用DWR可以比GWT更轻松地在Java代码中启用AJAX。
如果你正在使用GWT,最终你将被迫学习JavaScript。SpringSource的Arjen曾经说过关于XML和SOAP(虽然不是确切的引用):“你怎么能开发WebServices而不知道XML?SOAP就是XML。你无法避免它”。同样的事情也存在于GWT中。它最终还是JavaScript。
实际上,相对于Java而言,学习JavaScript并不那么难。更多的人知道JavaScript而不是Java。甚至网页设计师都知道它。作为一个程序员,你害怕JavaScript吗?
回到我重新编写的项目。当我重写我们的GWT应用程序时,用了将近两个月的时间。使用JQuery只用了两周,而且我已经有了JavaScript生疏的问题。
使用JQuery,您不必真正编写困难的JavaScript代码。这也是您首先使用JQuery的原因。使用GWT维护代码非常糟糕。您想要查看在代码中进行的最新更改......需要编译......等待GWT......5分钟......重复此过程并希望它不会抛出错误。如果出现错误,您将再次重新编译,并等待另外5分钟。反复循环。使用JQuery只需更改一行,刷新浏览器即可完成。
我知道我在这里没有客观性,但我只是分享我的经验 :) 结论是不要害怕JavaScript。Google 无论如何都使用JavaScript
我建议对于那些不懂 JavaScript 但更熟悉 Java 的团队使用 GWT。使用 GWT,你很可能会在兼容性测试方面节省数天甚至数周的时间,并避免许多新手常见的 JavaScript 陷阱。GWT 还具有出色的打包功能,可用于 CSS 精灵、嵌入式数据和其他功能。
然而,如果你了解并理解 JavaScript,我会使用 JavaScript,无论你选择哪个库。虽然我还没有仔细检查过 GWT 生成的代码,但我在 Google I/O 上看到了一些示例,虽然看起来很漂亮,但你可能会通过传统方式创建更优雅的 JavaScript 代码。
如果你的团队最熟悉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环境中编写客户端代码,但它并不隐藏您正在浏览器内部工作的事实。我认为GWT过于抽象了。Javascript实际上是一种强大的语言。您可以编写面向对象的代码并使用命名空间。使用类似jQuery这样的库,您不必担心大部分情况下的浏览器兼容性问题。现在所有主流浏览器都提供了很棒的浏览器开发工具(如Firebug),所以使用javascript非常容易。当javascript出现错误时,我可以轻松地确定它发生在我的代码的哪个位置。我可以监视变量并详细了解正在进行的所有操作,因为我正在针对自己编写的代码进行操作(与GWT不同)。
我同意Russ Cam的观点,这取决于团队熟悉程度。当我为我的个人业务应用程序工作时,我更喜欢GWT。我发现带有jQuery的javascript语法令人恼火。如果您的应用程序有10,000行UI代码,jQuery会导致一堆难以维护且无法重复使用的代码混乱。
有人知道用jQuery完成的大型项目吗?
如果你试图从结果文件大小中挤出每一个字节,请不要使用任何库并从头开始编写javascript(例如:Google主页淡入效果)。
关于javascript / jquery与gwt的一些想法。如果您使用常见的面向对象原则和设计模式,您可能会获得更好的性能代码。为什么呢?
让我们以多态为例。如果您编写一个在javascript中使用大量多态的应用程序,则将获得提供可维护性和代码重用的好处。但是,您的代码也会受到使用多态所带来的性能影响。
现在,如果您使用gwt,您也将获得提供可维护性和代码重用的好处,但是gwt编译器将将多态优化为具体类使用,从而提高了性能。
https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI