GWT对于新项目仍然相关吗?

49

这个问题 为什么我应该使用jQuery而不是GWT? 可能已经过时(就像它的答案一样)。而且大多数 相关 其他SO问题现在也可能已经过时了。因此,让我们更新关于新项目中GWT相关性的最新情况

GWT现在更加成熟

自2009年以来的问题/答案,GWT已经发展并且一些JS框架可以用Java编写:

  • GwtQuery是jQuery的一个扩展(gQuery)
  • GXT是ExtJS的一个扩展(前身为ExtGWT)
  • Smart GWT已经取代了GWT-ext
  • ...当然还有更多...(请随意添加)

甚至更多,Java代码可以转换为独立的JS库:gwt-exporter

但是低级别的JS框架可能已经足够了

但是我读得越多,就越看到Web开发人员建议放弃GWT,直接使用JS框架(Firebug,JS框架的IDE插件...)。

生产力

然而,我喜欢使用同一IDE(Eclipse、Netbeans、IntelliJ IDEA等)进行开发和调试的想法。我认为这样我会更加高效...我还应该考虑文档和社区(例如对于此SO问题的论坛反应)... 问题
  1. 什么样的新2014项目应该(或不应该)考虑使用GWT?
  2. 有没有易于AJAX Web应用程序开发和部署的相关替代方案?
  3. 现在的模式和趋势是什么?
我的具体情况

我刚刚完成了一个基于Python3 (http.server.HTTPServer)的POC(内部网站Web应用程序),调用(POST)bash脚本(一些C++处理)并检索JSON数据。一些JS(无框架)用于渲染网页。因此,我想知道下一次迭代的最佳选择。

但请回答关于其他情况的问题。我希望得到通用的问题/答案,以便许多人都能受益。


2015年10月更新

GWT看起来不太活跃,因为已经有11个月没有新版本发布了。但是在过去,版本2.4和2.5之间相隔13个月Git仓库镜像仍然非常活跃。此外,GWT是可扩展的,新功能可以来自于GWT库,而无需新的GWT框架版本。例如,查看最常见的移动GWT库及其相应的发行周期。同时,现在的趋势是到处使用Node.js!对于新项目采用GWT的采纳度确实取决于开发人员的技能/动力和项目寿命(周转/培训/维护)。一些其他标准,如可重用的可用源代码和上市时间也可能被考虑...请参见下面的优秀答案。


3
这篇帖子可能会要求个人意见,但我认为这个问题值得留在SO上,因为它具有普遍的兴趣和充分的发展。 - Lorenz Meyer
我同意你的看法@LorenzMeyer:在请求技术决策建议时,很难避免引发个人观点(个人偏好、个人经验分享等)。希望回答能客观且对其他人有用。请告诉我应该在我的问题(标题?)中改进什么。干杯 ;) - oHo
这个问题一年过去了,最后一个GWT发布也已经一年了。作为一个正在评估它是否适合新项目的人来说,这听起来有点死气沉沉的。 - Matthew Cornell
抱歉,我的意思是11个月没有新版本发布对我来说听起来这个项目不是很活跃。我知道这只是一个数据点(也许代码已经有定期更新),但这让我对未来承诺他们的智慧感到有些担忧。 - Matthew Cornell
感谢@MatthewCornell的反馈。是的,GWT看起来不太活跃。但请记住:2.4和2.5版本之间有13个月的时间间隔。Git repo mirror仍然非常活跃。此外,GWT是可扩展的,新功能可以来自GWT库。例如,请参见最常见的移动GWT库及其相应的发布周期。与此同时,趋势是在任何地方都使用Node.js!这确实取决于开发人员的技能/动力... - oHo
5个回答

43

对于第一点,我可以给您一些我会使用的标准:

当使用基于JavaScript的框架时,您通常在初始创建代码方面非常快。根据我的经验,在维护方面(修复错误、添加新功能、重构)时,由于工具支持不如静态类型语言那么好,所以速度要慢得多。因此,对于更大或长时间运行的项目,我总是会选择GWT,因为它使用Java并且具有编译器检查 / 生态系统/工具。我认为,随着时间的推移,您将获得更好的开发效率和扩展能力,因为您不会因为动态类型而遇到奇怪的问题。 对于不需要进行大型重构或生命周期短暂的较小项目,JavaScript框架可以加速开发。

在目标平台的上下文中需要调试,这对我也是一个标准。只要您有一个受DevMode支持或可以与基于源映射的SuperDevMode一起使用的浏览器,调试GWT代码就非常好。例如,macOS X上的Safari不受支持。对于移动设备,您可以在Android Chrome上远程调试JavaScript,但据我所知,这对于GWT不可能。

对于我来说,另一个标准是团队规模和人员流动率。基于Java的工具(IDE、代码质量检查器等)帮助开发人员,特别是新人,浏览其他开发人员的代码。这对于其他静态类型语言也是如此,但您要求GWT / Java。

接下来是堆栈问题...如果在服务器端使用servlet容器,则GWT很容易解决客户端和远程通信部分。将其与成熟的Java企业技术(JPA、EJB、Spring framework等)相结合也很容易。如果您需要/想要堆栈,则这是一个很大的优势。 如果您没有JVM,则不适用于多语言环境。

当然,对于GWT和JavaScript框架都有更多的标准。

而最大的问题是关于个人喜好。JavaScript具有非常好的概念(例如闭包),但由于动态类型,也存在风险。您更喜欢哪一个?

关于第二点:

我不确定是否有一种真正的替代品可以提供类似的功能和工具支持,大多数其他框架只关注其中一个方面(小部件、优化、数据绑定、远程通信、浏览器支持、I18n等等)。这并不意味着其他框架不好,但通常需要组合使用不同的框架才能获得GWT提供的功能。

关于第三点:

  • 由于TypeScript具有改进的类型特性和与JavaScript的互操作性,我肯定会去看一下它
  • 据我所记,Dart也有类似的目标
  • jQuery是永恒的选择,但根据您的需求,也有很好的替代方案。但这是高度主观的
  • 对于小部件,Twitter Bootstrap (http://getbootstrap.com/)很好,如果你认为它的做法可行。甚至还有它的GWT版本(http://gwtbootstrap.github.io/)

非常感谢你的回答,Steffen。它有助于做出决定。还要感谢你提供的GWT-Bootstrap链接 ;) 如果你愿意,你也可以提到Node.js作为当前的趋势。在接受之前,我还在等待其他答案... 干杯 ;) - oHo
1
我在其他GWT线程中读到的编译时间为5分钟,这是怎么回事? - Toskan
在开发过程中,有方法可以避免编译时间长达5分钟,因为测试时开发人员通常不需要完全优化的版本。当为生产构建时,从我的角度来看,这不是一个问题(使用大型服务器)。如果您对JS应用程序执行相同的操作(内联CSS /图像等,组合所有源代码,最小化/混淆,完美缓存等),则最终将使用多个工具,总计需要比GWT编译器更长的时间。是的,如果您关心延迟,带宽和其他事项,则应该执行所有这些操作。 - Steffen Schäfer
1
参考点... 我最大的 GWT 项目有大约 10k 行代码。我在开发中运行超级 dev 模式 (GWT 2.7)。开发周期是编辑、保存文件,点击 GWT-eclipse-plugin 的刷新按钮,在浏览器中刷新按钮,它会在几秒钟内呈现我的应用程序。生产编译是另一回事。为所有主要浏览器编译优化输出需要大约一分钟。注意:我正在运行一个带有 SSD 和 16G RAM 的 6 核 Mac Pro,所以我相信这有助于加快速度。 - phil-daniels
就我个人而言,我认为GWT过于复杂。实际上,你不能只写Java代码,而是必须搜索支持的库。例如,在GWT中没有jodatime(请参见第一个评论)。这只是一个例子。在我看来,最好使用Angular作为前端,纯粹使用REST,而不是使用GWT。 - Cherry
显示剩余2条评论

7

Steffen的回答非常好。我本来想在他的评论中添加一些观点,但发现自己打了比预期更多的字,所以将其作为一个单独的答案。不是为了得分...

我只想补充一个主观观点。事实上,大多数开发人员都是所谓的后端开发人员,缺乏开发Web前端的知识、经验和最重要的意愿。美国IT市场的现实是,大多数人更喜欢在简历中写Java而不是JS、PHP、Python和其他异国语言。原因在于薪酬。Java开发人员的平均薪酬更高。其他国家就不太清楚了。

因此,在公司中,大多数开发人员将是Java开发人员(或.NET,这超出了本次对话的范围)。为了让他们在UI上工作,您必须使用与Java兼容的技术,这将是JSP或GWT。 JSP需要学习JS库,以使前端更具可读性。

显然,如果您想用独特的UI来吸引公众,您必须使用允许更大程度自定义的JS库。 JSP和GWT都可以胜任,因为大部分工作都将在JS中完成。正如我上面提到的,很少有公司拥有经验丰富的JS开发人员。

但是,大多数应用程序都是为内部使用而编写的,而不是面向公众。从您描述的情况来看,您的用例可能属于此类别。

内部非公开工具通常具有比公共网站更复杂的功能,但只要功能存在并且对内部使用方便,其设计要求就更加宽松。

在这种情况下,您可以使用GWT,这对于Java开发人员来说比jQuery和高级库(如GXT)更容易接受,并带有标准主题。

对我们来说,使用GWT和GXT是创建一组内部应用程序的简单快捷方式。凭借我们公司拥有的Java开发人员团队,我们永远无法在同一时间内达到相同项目的质量甚至完整性。


2

请前往GWT的示例页面,展示GWT应用程序的真实世界示例

只需阅读这些示例的超重量级本质即可。

GWT本身并不轻巧,我怀疑它不是为了创建日期选择器而设计的。 GWT与jQuery完全不同。它可能更可比于JSF2而不是jQuery。问题“我应该使用GWT还是jQuery”可以回答如下:

如果您想要添加日期选择器、某些效果、可排序表格、自动完成等功能,您应该选择jQuery。

如果您想弄清楚是否应将GWT用作前端模板/引擎机制,则应考虑其他可比较的选项。讨论Java时,可能JSF2是您唯一的选择。而JSF的学习曲线陡峭。

我正在深入挖掘,我发现了一个悲伤的帖子:

http://polygoncell.blogspot.mx/2013/07/gwt-for-new-project-no-thanks.html

我来到这个页面,因为我正在阅读类似AngularJS、Backbone、单页应用程序(SPA)等即将推出的项目:

简而言之,谷歌放弃了GWT。GWT现在是开源的,因为他们只是抛弃了它。现在AngularJS得到了谷歌的大力支持。

编辑 我们亲爱的安德鲁告诉我“证明我的观点”

以下是用于评估技术是否有竞争力的算法。

1) 进入您喜欢的职位网站

2) 搜索{您感兴趣的技术}工作

3) 查看开放职位数量,相关技术要求等

4) 重复步骤#2和#3,以获取竞争性技术

5) 评估

今天(2016年5月19日),我在Upwork上搜索了GWT工作。

职位:23个。

我搜索了angularjs工作。

职位:1338个。没错。一千三百三十八个。

观点证明了吗?


@Tokskan "简而言之,Google 放弃了 GWT"…更新,Google Inbox(一个新的 Google 产品)使用 GWT:http://googlewebtoolkit.blogspot.com/2014/11/gwtcreate-2015-is-around-corner.html - phil-daniels
真的,听起来很有前途,他们正在写什么。 当然,又是一个超级沉重的应用程序。让我们看看未来会带来什么。 - Toskan
1
我认为这取决于你所说的“重”。我将一个基于JSF的框架ADF(我认为它很重)重写为非常优化的GWT(剥离了默认的GWT样式,编译了所有的CSS、图像等),这将所需的带宽减少了75%,构建页面所需的请求数量减少了90%。这是呈现完全相同的内容、图像等。与ADF相比,我肯定会说GWT可以非常轻巧(显然学习如何优化你正在使用的工具有所帮助)。我无法对其与带有库的纯JS进行比较发表意见。你是在与什么进行比较? - phil-daniels
我所说的“heavy”实际上是指桌面应用程序风格。在这个意义上,它很重。几乎所有元素都有花哨的连接和依赖关系。当然,这将大大减轻负载。 - Toskan
啊,我明白你的意思了。Google Adwords(在这里提到http://www.gwtproject.org/),可能是一个更简单的经典例子,而不是桌面应用程序的替代品。 - phil-daniels
显示剩余6条评论

1
我猜要回答第一点,你需要看看你目前的情况和目标是什么。
如果你有一支开发团队,他们大部分职业生涯都在使用Java,那么你可能需要花费6个月左右的时间让他们学习JavaScript的范例。如果他们有Groovy或Clojure等语言的经验,你可能可以缩短这段时间。所以,如果你不希望项目持续超过一年左右,那么GWT可能是一个好选择。
相反,如果你有一支JS开发团队,他们可能会觉得静态类型系统相当令人沮丧,学习如何有效地使用它可能需要半年左右的时间。所以,如果是这种情况,那么你可能不想在任何新项目中使用GWT,因为学习曲线超过了生产力。
我不太确定第二点在问什么。如果你询问整个堆栈框架,我猜你可以找到使用nodejs的东西,尽管我认为我没有足够的经验来提供建议。
在第三点上,我工作的地方似乎正在向使用JS框架(尤其是AngularJS)与一些(新的)用Python和Groovy编写的服务器/服务以及仍然使用Java的遗留系统转变。我们还有几个服务正在使用Clojure编写。

GWT具有Java到JS编译器,而不是JVM字节码到JS编译器。这意味着其他JVM语言只能用于后端。前端必须用Java编写。 - user7610

0

GWT很相关。目前有130,000个开发者使用它。如果你不信,请看 [GWT is coming back in .. in 2015] 和另一个StackExchange问题,它们都涉及这方面的讨论。GWT不应该是你的首选,因为它增加了很多复杂性。

那么GWT适用于哪些项目呢? GWT更加复杂

  • Java是一种更难的语言,这使得编写糟糕的代码变得更加困难
  • 编译成JavaScript会增加复杂性
  • GWT从基础开始构建,用于极其复杂的Web应用程序
  • GWT社区倾向于将用户体验和性能优先于开发人员体验以及JavaScript社区

然而,它具有更干净、更可维护的代码,是Java,速度更快,并且如果使用J2ObjC,可以在JVM和iOS上重用代码

使用GWT有一些非常有吸引力的原因: - Java - 从其他平台重用自己的代码。例如,Google Inbox使用GWT在Web上重用其大部分Android代码,并再次在iPhone(感谢J2ObjC)和服务器(感谢JVM在许多不同平台上运行的能力)上重用其代码。 - 使用Java库和工具,Java开发人员 - 许多开发人员更喜欢Java而不是JS,并且有很好的理由喜欢它 - 从头开始构建复杂的、高性能的Web应用程序。 - Java代码更清晰、更易于维护

GWT根据Google趋势Indeed职位趋势正在走下坡路,但JavaScript和jQuery也在走下坡路。我不知道为什么这些技术都在走下坡路。我的理论是有很多新的框架正在从GWT和JavaScript中夺走开发者。我认为这并不一定意味着JavaScript和GWT已经死了。这只是拥有更多竞争对手的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接