有没有人使用GWT并且可以说它真正实现了它所承诺的东西?

时间:2009-08-06 14:01:54

标签: java javascript gwt

我是Java Web开发人员的长期工作,而且作为大多数Web开发人员,我使用了大量的JavaScript。虽然我不像许多其他Java开发人员那样讨厌JavaScript,但我仍然意识到它的错误。

GWT是一种使用java编写javascript的方法。由于我很长时间都认识这两种语言,所以我对这种说法持怀疑态度。我的意思是,我很难相信你可以使用GWT真正创建具有丰富GUI的完整Java动态Web应用程序。这就是为什么我在这里询问是否有人有机会在大型项目上与GWT合作。如果是这样,我真的很想听听他们对此的看法。

11 个答案:

答案 0 :(得分:38)

我在GWT中编写了相当大的应用程序,我不得不说GWT比项目开始时给我的印象更深刻。我对平台的一般'感觉'是事情经过深思熟虑,除非能做得好,否则不会做事,并且可以在所有浏览器上做得很好(IE用户仍然是你的用户!)

现在,请记住,GWT真正擅长的是创建大型,高度动态的单页面样式的webapps。如果你的目标是增强一个带有一些javascript效果的静态页面,那么GWT就是大规模的过度杀戮(gquery可能会改变这个,但我没有gquery的经验)

我喜欢的一些功能包括:

  • 在服务器端和客户端之间共享代码的能力。 (当然,如果你的服务器端是用java编写的)。我一开始没想到会使用这个,但实际上,它确实可以节省大量的代码重复。但是,我发现一般情况下,这仅适用于使用GWT编写的代码 - 使用未编写GWT的代码通常不能很好地工作。这是因为GWT只有JDK中的类的子集,而在javascript中,您必须比在服务器端更多地关注性能。
  • 它旨在实现最快的javascript,比你手工编写的更快(因为如果你手工编写它,代码将无法维护)。不幸的是,许多人使用的浏览器具有令人难以置信的慢速javascript引擎,因此javascript代码的性能非常重要。 Gwt的编译器是一个真正优化的编译器 - 它将内联方法,实习所有字符串。尽可能虚拟化方法调用等。因为您正在为每个浏览器和语言环境进行编译,所以编译器还可以内联特定于浏览器和特定于语言环境的代码。这个Google I/O presentation有几个基准标记。
  • 它还会自动将您的图像精简到一起,以最大限度地减少所需的http请求数量,从而再次提高您网站的速度。 GWT 2.0允许您将任意文件组合在一起。
  • gwt创建的大多数文件都有一个强大的哈希值作为文件名,这样可以让你设置文件永远缓存,但如果文件发生变化则不用担心有旧版本的文件
  • GWT 2.0中的代码拆分非常令人印象深刻,并且很难手工完成。随着应用程序规模的增长,处理javascript的大小越来越重要,并且您需要能够将其拆分为块
  • 您使用静态类型语言编码。我知道有些人更喜欢动态打字,但我喜欢将这场辩论与emacs vs vi辩论进行比较 - 两个阵营都有很多聪明人,并且互联网上的争论不会改变任何人的偏好
  • 您可以使用java生态系统中存在的许多优秀工具,这些工具通常比等效的javascript工具更加成熟。 - junit,java IDE,java调试器,重构等。

答案 1 :(得分:5)

如果您熟悉JavaScript和Java,那么您真的非常适合充分利用GWT。许多人没有意识到GWT是非常好的分层,你可以真正决定你想要在哪个级别工作。

例如,我有时直接针对项目编写DOM库。这很像编写JavaScript代码,除了你能够正确使用IDE并获得编译器的强大功能。从编译器我得到静态类型检查,许多良好的编译器优化,以及(实际上我最喜欢维护代码)调试模式断言。没有人能真正做出很多断言的能力,但是能够编译一个调试模式是非常好的,它可以进行昂贵的检查以排除错误,然后关闭调试模式并让代码消失。 (不仅断言语句消失了,而且从断言中可以获得的所有代码也被编译出来。)

其他时候,我会针对GWT的UI库编写代码。该代码看起来有点像swing或SWT代码,因此对于纯Java开发人员来说它是最舒服的。在这个级别工作,您不必担心DOM,并且通常可以在不编写任何JavaScript的情况下构建应用程序。您偶尔会遇到一个错误,在某个浏览器上,某些内容无法在特定浏览器上保持一致。 GWT人员会考虑这些错误。

您可以选择想要使用的抽象级别。每个级别都有权衡,但GWT应该支持它们。

另外,完全披露:我是Chi上面链接的视频中的家伙,所以你可能会说我非常依赖GWT。

答案 2 :(得分:4)

与任何工具一样,需要正确使用。一个人可以巧妙地使用锤子并制造一些不错的东西,或者只是在东西上挥动它并且弊大于利。

我认为,

Google Wave已经成为GWT“可能”的原型。

找到良好的GWT设计模式仍然相当困难,因为该技术太新,因此可能会损害在GWT中开发非常丰富的大型Web应用程序的努力。在开始这样的项目之前,我建议查看模型 - 视图 - 演示者(MVP)模式的示例,并确保使用它或类似的东西作为Web应用程序控制流的基础。关于GWT以及用Java编写代码的一个好处是,清晰的MVP实现所需的高度抽象和解耦非常容易(感谢编译器)。

答案 3 :(得分:4)

我认为GWT在锡上做了它所说的......

选择GWT的五大理由:

  1. Tapestry可能过于复杂,对于刚开始加入团队的新开发人员来说,学习曲线相当陡峭。 ESP。在较大的项目上。

  2. 我发现我可以使用GWT开发“更丰富”的应用程序,因为我的优势是Java而不是Javascript。为了让我使用Tapestry实现类似的功能,我不得不亲自编写Javascript,这将成为维护的噩梦。

  3. 浏览器兼容性,我会花大量时间试图让我的手写Javascirpt在所有不同的浏览器上工作(就像我说Javascript不是我的力量:-) GWT编译器隐藏了我这个导致我花更多时间写作功能。

  4. 后退按钮布鲁斯,与Tapestry相比,GWT的历史监听器处理浏览器后退按钮。

  5. GWT的占用空间较小,因为只有数据通过线路发送,以便刷新整个页面。

  6. 这个名单还在继续,但总而言之,我很高兴能够做出改变并且从那时起就没有回头。

答案 4 :(得分:3)

我在谷歌的三年里创建了两个相当重要的GWT应用程序。它提供了它所承诺的东西 - 我的应用程序更具互动性,而且比我对Javascript的知识要多得多,而且我的Javascript工具可以让我使用其他工具制作。

我还发现这些应用程序比我之前使用的纯服务器端替代品更具交互性和趣味性。

它不是没有瑕疵,但它是一个非常高效的环境来做我做的各种应用程序。

观看凯莉的演讲。它以及I / O中的其他一些内容可以清楚地了解GWT可以做什么。您很快就会知道它是否是您正在设想的任务的正确工具。

答案 5 :(得分:2)

我在其中一份工作中简要介绍了一个较旧的应用程序,我必须承认它非常令人印象深刻。所有的代码都是用Java编写的,而javascript的构建非常精彩。

它有AJAX,动态页面,作品。它也有插件,例如Ext GWT框架。

绝对值得研究和尝试,但您可能会发现开发周期并没有“感觉”正确,因此您可以选择使用常规JavaScript。

答案 6 :(得分:1)

我一直在GWT上开发一个绿色领域应用程序一年,它出人意料地令人愉快。 GWT中使用的Java子集会引起一些令人头疼但毕竟没什么大不了的。我加入项目时没有太多的JavaScript知识,但我认为这不是问题。

我遇到的常见GWT相关问题通常与Ext GWT / GXT框架或FCKEditor集成有关。

答案 7 :(得分:1)

简直GWT摇滚 谷歌正在GWT上完全“谷歌浪潮”。

答案 8 :(得分:1)

当我尝试创建我的网站时,我不太了解Javascript。事实上,这就是我推迟创建网站的原因。

所以对我而言,GWT产生了巨大的变化,因为它使我能够创建一个动态的,跨浏览器的网站,如果不花大力气去学习Javascript,我绝对无法创建。

答案 9 :(得分:0)

我在几年内完成了一些项目,这太棒了。回到基于JS / JSP / request的框架真是太可怕了。

不要放弃编译时间检查,我的IDE中的单元测试,IDE重构等,在不同层之间共享代码,可靠的小部件集,非常精心设计的框架。

可以以可维护的方式更快地完成这么多工作。

答案 10 :(得分:0)

有一个陡峭的学习曲线,但对于真正动态的ui应用程序,你无法在javascript中有效地构建。我的意思特别是例如服务的应用程序前端,其中所有可搜索的字段和结果类型s和长度都是完全未知的。对于这种类型的东西,动态运行时定义了ui,在我看来没有比GWT更好的了。

缺点是陡峭的学习曲线(特别是对于非摆动的Java程序员,传统的请求/响应servlet api人和gals)以及做出决定后进入GWT的角色。