微软上个月发布了 Volta 预览版。很多人都对这项新技术和架构营造(Architecture Factoring)的概念发表了评论。一些人将它与GWT( Google Web Toolkit )进行了对比。James McKay 对这些新的抽象持怀疑态度,因为JavaScript 的开发环境已经在逐步得到改善。Ray 正在开发Chronoscope 项目,他对 GWT 和 Volta 的启动时间进行了比较。Didier Girard 是巴黎一家名为 SFEIR 的咨询公司的 CTO, 他一直在 OnGWT.com 上写有关 GWT 的博客。InfoQ 也就此问题与他进行了一番讨论。
InfoQ: GWT 快两岁了,您从一开始就在跟踪使用这项技术,它现在发展情况如何,能不能简单介绍一下?
Didier: GWT 是一项可以用来开发富因特网应用程序(Rich Internet Applications ,RIA)的技术。RIA 技术目前可以分为两大类。第一类是用于开发传统意义下的信息系统的技术,GWT 就属此类;而第二类技术将重点放在多媒体领域(如 Flash, SilverLight 等)。
基于 GWT 的应用不再以页面导航的方式工作,它们被称作单页面程序,更准确的说就是只通过单个 URL 就能完整访问的应用程序。此类框架的优点是免部署和浏览器兼容,目的之一是达到桌面应用般的用户体验。
目前 SFEIR 正在开发五个基于 GWT 的应用程序,而且已经有几款推向市场的产品。最近我们用 GWT 成功开发了一款外联网(extranet)应用,这个应用受到了包括客户全公司上下的欢迎,这些也正是缘于用户良好的体验。RIA 特别是 GWT 就用户体验和开发体验来说确实可以称得上是一场革命!
我们的通常的做法是在 Windows 平台进行开发,针对 Internet Explorer 和 Firefox 上进行了大量的 QA,同时也在 Opera 和 Safari 上进行验证。
InfoQ: 这项技术对 Web 应用的架构意味着什么?特别是你能否对 MVC 模式在其上的适用性做一些评论?
Didier:GWT 非常容易上手,一个 Java 程序员几乎不用学习什么新东西就可以开发基于其上的 Web 应用了。在这一点上 GWT 有点类似于 VB。会用 Java 开发用户界面的程序员很快就能学会使用 GWT。
在 MVC 体系中,GWT 属于视图(View)部分,对模型(Models)和控制器(Controllers)部分,GWT 并没有什么硬性规定。对一个比较基础的应用来说,有视图部分就足够了。如果是一个复杂的应用,还是推荐利用传统的 MVC 方式解决问题。在实际中我们采用的是 MVC 模式的一个变种,即层级 MVC 模式( Hierarchical MVC pattern ,HMVC)。在这个变种中,每个图形组件自身就是一个 MVC 元组(tuple)我们通过事件来进行状态变化广播并建立起每个图形组件的“行为(behavior)”。我们还专门建立了一个框架来简化此种模式的实现 ( GDF ),大家能在 Google Code 上找到它。此框架不太像传统框架那样着眼在防止开发者犯错,它更像是对最佳实践的指导和演示。
InfoQ: Volta 发布后就经常被拿来与 GWT 对比,您对这个问题是怎么看的呢?
Didier: 目前,Volta 只是一个试验性的概念,它的目的是使大家了解未来微软产品中的一些方向。但 Volta 的愿景显然已经远远超过了 GWT。GWT 仅仅是一个将 Java 编译成 Javascript 的编译器。而对 Volta 来说,首先,它本身是独立于编程语言的,一个程序员可以根据自己的喜好选择编程语言,然后将写好的代码编译为 Javascript。先开发出一个应用程序后然后再决定在哪里执行它,其实这才是 Volta 真正想做的事情。这确实应该算作一个雄心勃勃的计划。
Volta 的第一项本领(多语言)当然是有用的,而第二项(先开发再决定运行环境)在我看来还只是理论上的。目前还没有足够的数据来对其实际的可行性进行判断。
举个例子来说明我的观点吧。在 Javascript 中是不存在 long 类型的,因此通常用 float 来替代,这是以牺牲精度为代价的。正是由于这类原因,架构营造(Architecture factoring)变得比较困难。有选择的余地看起来确实是好事,但是为了使选择切实可行,你还是必须提前做足功课。事实的本质是语言是无法把自身直接映射成另外一种语言的。语言到语言的编译过程实质上是一种映射:在此过程中会有语义的损失。
InfoQ: 诸如 GWT 和 Volta 之类的技术以后会向什么方向发展呢?
Didier: 就目前看情况看趋势是开发语言与执行语言的分离。理解这一点很重要。Javascript 程序员对这句话可能会有抵触情绪,但是要知道 Javascript 确实是非常强大的语言,甚至强大到难以掌握,想想它可是要兼容四个不同的浏览器啊!我喜欢把浏览器比作处理器,GWT 或者 Volta 所作的就是产生针对这些处理器优化过的代码,开发人员通常不用再回头优化这些代码了。这就是这些编译器能有助于高效地建立复杂 Web 应用的原因。我们应该将 GWT 或者 Volta 看作 Web 上的 GCC,并且忘掉 Javascript 是一种编程语言而将其看作通用的 Web 运行时。
Google 现在正将浏览器建成为一个“平台”。目前的浏览器是远不完善的,这也是 Google 开发 Gears 的原因。Gears 包括一个本地数据库,工作者池(WorkerPool)和一个本地服务器。这还只是第一步,第二步将定义浏览器和服务间的交互。Google 目前正在开发用于处理同步问题的 API,例如用于缓存和服务间事务性交互的 API。间歇性连接是生活中无法更改的事实,比网络延迟和带宽限制还要难解决。例如,iPhone 手机就不是总处于连接状态。Google 正致力于解决这个问题。许多其他的 Gears API 也不久就会发布:多文件上载 API(multiple files uploading API),加密 API(Crypto API),日志 API(Log API),消息 API(Messaging API),方位 API(Location API),桌面快捷方式 API (Desktop Shortcut API),图像处理 API(Image Manipulation API)(更多信息请查看 Dion Almaer 的博客)。Gears 的美好愿景是它赢得 PCWorld“年度最具创新产品奖”的原因。
在RIA 架构中,我们几乎无一例外地要用到远程服务,而服务经常可能与应用本身的URL 没有什么联系。在编程模型中,服务代理是在本地的,它自然成为架构中管理连接特性的角色。让浏览器更多地充当平台的角色,
已经成为了RIA 框架下一步的目标所在。
以上所述并不适用于目标放在富媒体的第二类架构,其重点更多地放在观众、性能和特别是流的性能上。我们也确实看到了一个富媒体接入市场正在形成。例如, goodOS 刚刚发布了一个面向 Web 的 Linux 系统。传统网络接入点仍将产生内容并且接入点会变得更健壮,但是应该看到一种新型的内容和应用的接入点已经产生了。
InfoQ: 你对一个开发人员和架构师有什么好的建议吗?
Didier: 如果你是一个 Java 程序员,一定要试一下 GWT,你应该会接受它的。如果你试一个.NET 程序员,希望你能时刻关注 Volta 的进展,因为它的确可以算作微软 Web 战略的一个里程碑。
查看英文原文: Interview: Didier Girard, are GWT and Volta GCC for the Web?
评论