`

Google Web Toolkit 真的至关重要?

    博客分类:
  • GWT
阅读更多
 Google Web Toolkit 已经吸引了全世界无数web程序员的眼球,因为它承诺能够使AJAX Web开发变得简单。但是,它到底有多大的优势?而且,更为重要的是,我们有多需要它呢?

  这是一个否认的声音——首先,作为一个开发人员和框架架构师,我发现Google Web Toolkit (GWT)非常得迷人。它是那些非常有才能的人才能做出来的相当棒的软件。但是,问题是:在企业软件开发的领域中,这种吸引力的作用好像并不大。我的意思是,量身定制的软件中包含着成百上千个用例,而这些用例之间存在着极其复杂的交互业务和GUI逻辑。这种软件对于大多数程序员来说非常重要,因为工作中会牵涉到。而且这种软件也是我下面要探讨的Web应用程序开发的类型。

  首先,我们来总结一下GWT为(Java)Web 开发团体所带来的创新,有以下几点:

  一个使用Java.lang API实现的从Java到Javascript的编译器——虽然这个想法很棒,但是,这确实不能算是创新。因为,至少有一个以上的方案(J2S)已经提供了与此类似的特性,实际上,还提供了更先进的JavaScript生成特性。

  一个窗口组件库,能够在不使用HTML的情况下构建用户界面(UI)。这有些类似于Dojo中具备的功能,并且与J2S/RIA几乎相同。除此之外,还有一些服务器端的框架也能够提供相同的功能(如Echo2、wingS)

  一个在HTTP协议上的远程过程调用(RPC)的实现,它能够通过DWR在其他协议上实现。

  一个允许在Java中调试应用程序的容器。实际上,J2S确实不需要这个功能,因为它能够解释SWT/RCP代码,并且作为桌面应用程序自动运行。

  在项目开始时,脚本是受到了Ruby on Rails的启发(至少是类似的)。

  因此,Google主要是陷入了这个严重的问题:重新实现所有这些可利用的项目。当然,你可以争辩说,他们实现得更好、用起来更加方便、使代码更加文档化(这通常是一个项目成功与失败的关键)。但是,他们既然够像重新实现无数的其他项目,那为什么不重新实现Eclipse项目呢?而且,他们为什么不利用丰富客户端平台(RCP)或者丰富互联网应用程序(RIA)堆栈呢?

  关于这个问题,我的回答非常简单——Google希望解决他们自己的问题。为了理解GWT,我们首先需要理解Google创建它的动机。Google是不做商业软件的——他们做桌面软件,然后把它们放到web上(如GMail、Base、Spreadsheet、Calendar等)。这些软件所包含的用例相对较少,而用例通常都是很复杂的并且需要响应的。

  Google需要一种开发新的web应用程序的方式,这种方式应该是:

  1. 高度响应的

  2. 迅速开发的

  3. 迷人的

  其中,第二个目标的障碍是:如果要在web上达到高度响应,那么,你必须采用很多快速解决方案,而且更糟糕的是,你需要针对不同的浏览器采用不同的快速解决方案。正是这个问题使AJAX应用程序的开发成本远远高于普通应用程序的。

  针对这个问题,一个显著的解决方案是:把这些快速解决方案封装起来,放到简洁的界面背后。还有一个不很显著的解决方案是:使用大量的集成开发环境(IDE)和调试器,把快速解决方案封装到静态类型语言中,然后,尽量避免在应用程序中同时使用JavaScript。因此,GWT是解决快速开发AJAX类桌面应用程序的最佳方案,并且,GWT能够运行在主流的浏览器上而仅需要相当少的测试。

  但是,剩下的开发人员应该怎么办呢(尤其是那些编写大型商业应用程序的开发人员)?我的观点是:如果GWT不是100%纯粹基于JavaScript的话,那么它将是一种非常棒的视图技术。关于HTML和JavaScript的问题是:目前,至少有4种大型的不兼容的平台实现机制。我们正在讨论的就是:一种能够配套四种虚拟机的语言,同时它能够与事后制定的标准松散耦合——James Gosling的恶梦实现了。

  Web在商业应用程序中能够得到如此广泛的使用,其中一个主要原因就是:它是建立在Java承诺一次编程处处运行的基础上的(因为web平台比Java简单得多,而且对客户端环境的依赖较少)。而且web也能够给我们提供这些可能的特性:易于混搭、整合、重新设计等等。但是,JavaScript却使这个承诺变得毫无意义,因为在浏览器中存在着:

  对于脚本规模的限制

  对于脚本存储消耗的限制

  对于脚本运行时间的限制

  交叉域的访问限制

  非常多其他类型的限制,程序缺陷和不兼容性,这些都在折磨着web程序员

  所有的这些意味着你只能封装这么多——迟早一些“有毅力”的bug会死灰复燃,或者,使用标准工具包的话,你可能完成更多工作,而现在,你还需要采用JavaScript快速解决方案。实际上,我几乎能够确保:在所有规模足够大并且复杂的应用程序中,这种现象很快就会出现(我的意思是像内存溢出这样的bug,它们几乎不可能在平台中被调试出来)。确实,对于应用程序而言,HTML和HTTP从来都是没有意义的,它们的作用是用于在科学家之间分享信息的。不久,动态DOM、CSS、XML以及其他缩略语所代表的技术将运用到这些应用程序中来,虽然它们能够适合,但是,并不匹配——你可以用,但是无法走得很远。

  现在,结束对AJAX的讨论,我们切换到应用程序本身上来。一个典型的大型企业应用程序有着各种不同的用户界面需求,而不仅仅是一个典型的桌面界面。在商业应用程序的图形用户界面(GUI)中,有许多大而复杂的工作流,但是,只是一小部分这样的工作流是需要达到高度响应的(典型地,某些查询或者搜索)。而且,通过使用HTML并且添加一些独立于浏览器的JavaScript,这些需求是很容易满足的。实际上,如果我们对商业用户的需求进行调查的话,就能够了解到他们所需要的软件是:

  满足他们需要

  能够快速开发、价格合理

  不要与单独的开发商或者合作者绑定

  易于与其他软件整合

  通过以上分析,能够找到给商业世界带来这些的软件,并不是那些没有使用AJAX的软件。在web框架中,首先需要满足的是高度响应和整合——可能这就是为什么Struts如此流行的一个原因(运用Struts的主要过程是解决大量的遗留代码)。而且AJAX,如果有什么区别的话,那就是:加大整合难度、降低生产力。

  但是,这就意味着我将永远宣传简单的web应用程序么?当然,不是!我只是认为:基于IE来模拟桌面,这是商业客户端所无法承受的。如果已经做好了一个通用的丰富的GUI平台,那么,我将成为第一个进行试验的人。使Eclipse 丰富客户端平台(RCP)更加完美或者在Adobe Flash上编译Java应用程序(至少是稳定的平台),甚至可能将Avalon运行在Linux上。仅仅给我一些任务——让我以此来编写Java代码、并且带来的困扰比web应用程序少,我就能够无障碍地工作了。

  因此,在未来的几年内,Google Web Toolkit至关重要么?我肯定希望是不,因为这将意味着,我们必须在本质上具有破坏性的平台上来构建下一代的应用程序。而且,不论我是否有偏见,在21世纪的前十年内,我非常希望能够看到更好的平台发布。
分享到:
评论

相关推荐

    Google Web Toolkit API 文档

    总的来说,掌握GWT API对于想要使用Java开发高性能、跨浏览器的Web应用的开发者来说至关重要。通过深入学习和实践,你不仅可以创建复杂的前端应用,还能享受到Java语言带来的开发效率和稳定性。

    Google-Web-Toolkit (GWT)

    4. **管理浏览历史**:提供机制来管理用户的浏览历史,这对于创建更加流畅的应用体验至关重要。 5. **提供常用组件**:提供诸如文本框、单选按钮等常见的用户界面组件,加速Web应用的开发过程。 6. **实现状态化Web...

    crypto-gwt:为 Google Web Toolkit 提供加密操作

    6. **软件维护**:描述中提到的项目可能被放弃,提示了软件生命周期中的维护问题,对于安全性至关重要的库,持续的更新和维护是必要的。 7. **自定义开发**:如果 crypto-gwt 不直接支持所需的功能(如 HmacSHA1)...

    Google App Engine 入门教程

    入门教程涉及到了安装与配置Eclipse开发环境、安装Google App Engine插件、创建和配置Web应用项目以及编译时的Java版本兼容性问题,这些知识点对于想要开始使用Google App Engine开发Web应用的开发者来说至关重要。...

    Gxt,包含resource

    "包含resource"这部分意味着压缩包中可能包含了GXT库的资源文件,这些文件通常包括CSS样式表、图像、本地化字符串等,它们对于自定义GXT组件的外观和行为至关重要。资源文件使得开发者可以通过简单的配置改变应用的...

    GXT以及Web框架历史

    每个框架都有其独特的优势和应用场景,理解它们的发展历程和特点,对于选择合适的工具来构建高效、稳定的Web应用至关重要。无论是初学者还是经验丰富的开发者,都能从这些框架中找到适合自己的开发方式,推动Web应用...

    javascript_debug_toolkit.rar

    JavaScript作为互联网应用的核心语言之一,其调试工作至关重要。JDT提供了一系列功能,帮助开发者进行有效的错误检测、代码调试和性能优化。以下是一些关键知识点: 1. **断点**:在代码中设置断点可以让程序在特定...

    SD大会精品讲座:运用AJAX开发Web-2.0应用

    它强调用户参与、互动以及个性化服务,而AJAX(异步JavaScript与XML)作为实现Web 2.0的关键技术,在此过程中扮演着至关重要的角色。本篇讲座由Sun公司的Java技术推广经理李涛先生主讲,旨在详细介绍AJAX的基本概念...

    基于SOAP的Web-Services开发的关键技术_SOAP的Web-Services_Web-Services开发_

    Web服务是一种通过网络进行通信和数据交换的技术,它允许不同系统之间进行互操作。SOAP(Simple Object Access Protocol)是Web服务的一种主要协议...理解和掌握这些关键技术对于成功开发和集成SOAP Web服务至关重要。

    Gwt In Action

    GWT将Java代码编译为JavaScript,因此理解JavaScript基础对于学习GWT至关重要。书中可能涵盖JavaScript的核心概念,如变量、函数、对象、DOM操作和AJAX调用。 5. EXT EXT是一个基于JavaScript的UI组件库,提供了...

    静态资源、struts2、Hibernate、Spring、js核心jar包

    在IT行业中,构建高效、可维护的Web应用是至关重要的,而这些应用通常依赖于一系列框架和库。这里提到的“静态资源、Struts2、Hibernate、Spring、js核心jar包”涵盖了Web开发中的几个关键组件。让我们逐一深入探讨...

    xcncip2toolkit:自动从code.google.compxcncip2toolkit导出

    【xcncip2toolkit: 自动从code.google.compxcncip2toolkit导出】 xcncip2toolkit 是一个基于Java编程语言的工具,它的主要功能...在处理类似xcncip2toolkit这样的工具时,理解Java编程基础和API交互原理是至关重要的。

    org.liveSense.framework.gxt-1.0.5.zip

    在这个目录下,开发者可能会找到JAF的源码、构建脚本、测试用例以及其他相关文档,这对于理解其工作原理和集成到LiveSense框架中至关重要。 总的来说,这个压缩包组合涉及的知识点包括: 1. Google Web Toolkit ...

    信息交换图1

    【信息交换图1】是一种在IT行业中用于描述系统间数据交互和工作流程的图表,它在软件开发过程中扮演着至关重要的角色。此图通常用于表示不同角色之间如何共享信息、执行任务以及协作完成项目。在给出的描述中,我们...

    open-flash-chart2.0

    了解不同版本间的差异对于决定是否升级或如何迁移现有项目至关重要。 总的来说,"Open-Flash-Chart2.0"是一个功能全面的图表库,适用于需要在Web应用中实现动态数据可视化的开发者。其易于集成、高度可定制的特点,...

    2021-2022年收藏的精品资料软件工程师谷歌八大热点新工具开发者必备.docx

    【谷歌八大热点新工具】 谷歌作为全球领先的科技公司,不断推出和更新各种工具,以满足开发者的需求。在2021-2022年间,谷歌针对软件工程师和...对于想要紧跟技术潮流的开发者来说,了解并掌握这些工具至关重要。

    alchemy-1.0.2.zip

    在IT行业中,开源项目扮演着至关重要的角色,它们为开发者提供了丰富的代码资源和学习平台。今天我们将聚焦于一个名为"gwtp-gxtwindow"的开源项目,通过其压缩包文件"alchemy-1.0.2.zip"来深入探讨其中的技术细节和...

    基于GWTRPC的通讯软件

    6. **学习与实践**:理解GWTRPC的工作原理并掌握其应用,对于开发高效的Web应用程序至关重要。开发者需要熟悉Java和JavaScript,了解HTTP协议,以及JSON序列化和反序列化的概念。同时,阅读和分析"基于GWTRPC的通讯...

    identity-toolkit-django

    理解如何安全地管理和更新这些令牌是至关重要的。 8. **错误处理和安全性**:集成过程中要处理各种可能出现的错误,如无效的令牌、网络问题等。同时,确保遵循最佳实践,保护用户数据的安全,如使用 HTTPS 进行通信...

Global site tag (gtag.js) - Google Analytics