6

我是 javascript 框架的忠实粉丝,尤其是 jQuery。我一直想设计像“plurk.com”这样的网站,但我知道它需要非常大的 javascript 行。所以这让我很失望。但自从我开始了解 GWT,我真的很想测试一下,想问你开发复杂的东西是否比使用 javascript 或它的框架更容易。你更喜欢哪一个?

4

6 回答 6

22

我认为这个问题的一些答案是非常不知情的,我怀疑回答他们的人从未在大型项目中使用过 GWT。是的,GWT 是处理大型 AJAX 网站的好方法,对于涉及后端的大型复杂网站,它可以让 JQuery 之类的东西在公园里上下颠簸。我一直认为 javascript 本身非常适合做小型客户端的事情。当你需要做一些更复杂的事情(比如动态字段、弹出窗口、动画)时,你可以引入 JQuery 或 Prototype 之类的东西。当您想更进一步时,您可以选择 GWT。

人们认为因为你是用 Java 编写的,所以它是为后端开发人员设计的,用于进行前端开发。它不是。Java 只是他们选择的语言,主要是因为它被广泛使用,静态类型,并且有很多优秀的编辑器可以使用它。

我也不赞成泄漏抽象理论,它不会尝试完全抽象出 HTML 元素,因为如果您选择使用它们,它可以让您直接访问原生 javascript 和 DOM。

简而言之,我们已经在 GWT 中构建了非常复杂的站点(其中一个在 GWT 博客中有特色),并且还使用了 JQuery 等其他库。我可以 100% 自信地告诉你,一旦你开始了解 GWT,它就会杀死那些为复杂任务而死的其他框架。它还有一些很棒的内置功能,可以帮助让事情变得更好,甚至可以做一些其他框架不支持的事情(比如它可以用图像做的魔法)。有关更多详细信息,请参阅此博客文章:

http://googlewebtoolkit.blogspot.com/2007/10/epo-builder-built-with-gwt.html

于 2009-01-06T22:01:12.690 回答
7

很少有事情像“生成的 Javascript”那样让我害怕。 在这些情况下,泄漏抽象定律必须是双重正确的。

编写有效的跨浏览器 javascript 是一个不断完善的棘手过程。试图破译一些生成的、模糊的 Javascript 出错的地方是一个令人头疼的问题。修复纯 JS 库中的错误已经够糟糕的了。

对我来说,GWT 是一个旨在让后端开发人员编写前端、浏览器内代码的技巧。不幸的是,现代 Web 应用程序的现实意味着您只需要了解 Javascript 和 DOM。有些东西会坏掉,你需要知道为什么。

我认为你最好选择一个好的 javascript 库,比如 jquery 或原型,然后好好学习。这些库抽象掉了应该被抽象掉并且不太可能在边缘情况下中断的东西,比如数组操作和 AJAX 请求。

于 2009-01-06T16:04:43.877 回答
4

是的,确实如此,因为您将使用 Java 而不是 Javascript。

精湛的 IDE、静态代码分析、搜索和重构——所有这些都将使您在大型项目上的生活更加轻松。

于 2009-01-06T16:02:28.330 回答
3

不,它没有。

它并没有消除复杂性,它只是让您可以从 Java 角度处理它。因为这为您提供了 Java 中可用的所有工具……仅此一项就值得。

不过,JavaScript IDE 越来越好,通常如果您使用 jQuery 或 Prototype 之类的框架,那么您可能会发现它比处理像 GWT 之类的重量级抽象层更容易。

我个人的偏好是采用纯 JavaScript 方法,但那是因为我喜欢能够更贴近金属地工作,而且我有足够的纪律来驯服我的 JavaScript 猫。

于 2009-01-06T15:59:44.793 回答
2

使用 GWT,您实际上并不是在编写 JavaScript。它的整个价值主张是您可以编写 Java,它会为您编译成 JavaScript。

于 2009-01-06T15:43:13.500 回答
2

我正在做一个使用 GWT 效果很好的项目。这对我们来说是一个不错的选择,因为我们都是主要从事内部工具的 Java 开发人员。我无法说它对大型最终用户网站有多大用处。

我特别欣赏的一个优点是无缝的对象序列化和反序列化。不仅 XML-RPC 的细节被抽象掉了,而且由于相同的 Java 代码被编译为服务器端的字节码和浏览器的 javascript,您几乎可以像服务器和客户端在不同的类加载器中运行一样编写代码。相同的JVM。例如,您可以在服务器上构造一个 Java 对象,将其作为 RPC 服务调用的返回值发送到浏览器,然后浏览器代码可以使用相同的 Java 类来操作您刚刚返回的对象。同样,RPC 调用的参数可以构造为 Java 对象,服务器在另一端接收相同的 Java 对象。所有这一切都没有涉及(反)序列化的细节。

于 2009-01-06T17:32:00.567 回答