为什么GWT和Script#风格的框架没有成为主流?

8
通过GWT,我们可以用Java编写代码,并将其转换为JavaScript代码。 通过Script#,我们可以使用C#编写代码,并将其转换为JavaScript代码。 听起来GWT和Script#可以使Web开发人员免受JavaScript之苦。那么,为什么这些工具没有占据主导地位?为什么还有人专门写JavaScript代码?

你还忘了Pyjamas - 这个项目可以将Python翻译成JavaScript。 - Eugene Morozov
8个回答

9

有多个原因,而最重要的原因因开发者而异。以下是两个原因:

  • 因为JavaScript比Java/C#更好/灵活/强大(在此插入所选形容词)
  • 人们不信任GWT/Script#生成的输出

8
我只能代表GWT说话,以下是我认为阻碍它发展的因素:
  • 编译时间(GWT编译时间很长,而JavaScript更改是即时的)
  • 学习新语言(许多Web开发人员不知道如何编写Java代码)
  • 关于泄漏抽象和编译器的FUD。人们担心编译器为他们生成JavaScript和泄漏抽象的事情。在我看来,这两者都只是FUD,但这并不能减少它们的原因。
  • 人们经常不理解何时何地以及如何使用GWT,并因此放弃它,因为他们试图将其塞入错误的领域中。
  • 有一种看法认为GWT是为后端开发人员编写JavaScript而创建的,但实际上并非如此。
  • 使用VerticalPanels、HorizontalPanels、FlowPanels和FlexTables的整个想法对于已经学会如何在HTML中布局的人来说是陌生的。
  • Google在营销方面做得不好。没有冒犯GWT团队的意思,但如果它的营销/展示更好一些,它就会像热饼一样流行起来。
  • GWT缺乏出色的小部件库。默认提供的小部件很好,但我们需要更多。像GWT-ext这样的库在我看来没有帮助,因为它们只是试图将JavaScript库包装在GWT中,并没有利用Java编程的强大功能。
  • 对于Web开发人员来说,学习曲线陡峭,因为它的框架更像Swing而不是HTML。

我仍然在我的日常编码中使用它,但我早就接受了它不会起飞的事实。


优秀的答案 - 我自己也有同感。我希望GWT能更受欢迎。但是GWT的一个缺点是它容易生成质量较差的HTML,并且不太适合公共面向互联网的“网站”。它非常适用于在线GUI应用程序(例如交易客户端)。 - Chii

6

对于 UI 开发而言,使用 JavaScript 要比使用 Java 更加轻松。你会使用一个将汇编语言转换为Java的框架来编写Java应用程序吗?

JavaScript 的大部分“疼点”都是由于浏览器不兼容造成的,这也因大型 JavaScript 库(如 Dojo)和浏览器本身的改进而得以改善。


++ “汇编语言到Java” - 我喜欢那个... :-) - Shog9
确实如此。在Java中使用脚本语言是一个寻找问题的解决方案。 - Chuck

5

由于不完美的抽象,以及Javascript比Java或C#更加优雅和适合用于用户界面,因此需要进行翻译。


2

因为GWT不是适用于所有情况的解决方案。

GWT非常棒,可以节省Java开发人员编写富互联网应用程序的时间。 但是!

据我了解,编写GWT站点以便于SEO优化非常困难。 它无法提供非JavaScript备选方案。 它并不真正针对加载速度进行优化。


除了关于GWT不是真正针对加载速度进行优化的那一点,我同意所有评论。GWT确实通过其编译后js的无限缓存以及优化的RPC传输协议来真正优化加载速度。 - Chii
由于#锚链接的存在,网络中往返次数会略微增加。一请求一响应是不可能的。 - Andreas Petersson
@Chii 在GWT中,创建具有“巨大”初始请求负载时间的页面非常容易(因为它正在下载该页面将需要的所有内容,而许多GWT应用程序仅为一页或两页)。对于很多人来说,他们因为某些对JavaScript的不合理恐惧而使用GWT,这种行为是完全意外的。 - Hank Gay
@hank:那些因为无端恐惧而来到GWT的人,在任何其他语言中都会表现得同样糟糕。GWT并不是JavaScript知识或CSS知识的替代品,它只是使这些知识更易于应用,并且以一种更少出错的方式。GWT的编译器可以捕获大多数在js或css中难以捕获的错误(例如,拼写错误的css类名)。 - Chii
@Chii 我认为如果你对选择GWT的人进行一项调查,相当大一部分——甚至有可能是绝大多数——都属于无端恐惧的范畴。他们看到在Eclipse中编写Java代码的介绍就被吸引了。我完全同意,GWT并不会降低理解Javascript或CSS的需求,但我认为这并不是刚开始接触它的人普遍持有的观点。 - Hank Gay

2
(x)HTML、CSS和Javascript可以看作是世界上最灵活的用户界面系统之一。像GWT这样的系统会为了稳定性而牺牲一些灵活性(注意:我对GWT的基本原理不是非常熟悉)。许多软件或服务型公司利用(x)HTML、CSS和Javascript提供的灵活性来在市场上区别于其他竞争者。
虚构的对话:
客户:我喜欢你们建造的用户界面,但能不能将其宽度增加20像素,稍微改变一下色调,并在鼠标悬停在它的一半时添加一个额外的浮动提示?
GWT公司:很遗憾,GWT框架没有任何支持这种功能的方法,除非进行大量的修改或付出您不想支付的额外工作费用。
(x)HTML/CSS/Javascript公司:没问题,我们可以轻松地完成这个需求,这是一个估算。
我并不是在争论什么是好坏,这个虚构的对话也比实际情况更为简单化。但是,有些公司如果被迫采用类似于GWT的方法,就会失去竞争优势,所以他们不会这样做。

0
如果你是一名Java程序员,不想学习JavaScript或者不关心IE版本如何处理Js,那么GWT就是你的选择!

0

JavaScript的问题不在于语言本身,我认为它相当不错,而是因为JS被误解了,人们不认真对待它,不去学习它,而是复制粘贴糟糕的脚本,却不理解代码。

其次,InternetExplorer、JScript和混乱的DOM实现破坏了该语言的形象。

但主要问题是,你必须理解DOM和JavaScript的工作原理才能编写GWT代码。这与JSF开发类似,你必须理解HTML和CSS。这不像编写Java那样,你不必理解整个字节码。


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