使用Vaadin构建网站

西门吹雪 2012-02-20

看到一篇关于Vaadin的文章,感觉作者写的很 有代表性,尝试翻译了一下,大体意思如下:

从2004年开始,我们紧随技术发展,将网站重构过多次。前端技术,我们开始用的是Struts v1和JSPs。2006年我们迁移到Struts v2和JSPs,从程序员的视角来看,这样的改进令我们非常满意。之所以没有采用JSF,是因为我们所有成员一致认为JSF不合适。

在2007年,我们采用Mootools技术增加网站Ajax特性,增强了用户体验。但是一年来,维护客户端JavaScript代码实在是一件痛苦的事 情。不能说我们的JavaScript代码构建的很糟糕,也许是我们不够聪明吧。我们只是感觉太多精力花费在技术层面,而用在开发应用特性方面的精力却非 常少。

2009年六月,我们着手开发课程市场,并于2010年3月发布。我们没打算继续采用Struts/JSP/JavaScript组合,另外为了增强用户 体验,需要更多Ajax特性,可选的技术有JSF、Flex、GWT。

我们仍然对JSF不感冒。在经历使用JSF的训练项目之后,我强烈坚信JSF存在一些基本问题。使用JSF/JSP/JavaScript替换现有程序 不仅没有改善,恰恰相反。

Flex十分诱人,已经存在好多年了,人们喜欢它,而且用户体验非常棒。但是...我仍然感觉web应用程序应该含有Html(尽管我的观点可能是错 的,但我情不自禁,哈哈)

GWT同样很吸引人,没有JSP,没有HTML,没有JavaScript。但是...从程序员的观点来看,仍然存在客户端和服务器端(这与Struts/JavaScript一样)。这对client-centric的程序如Google Docs是非常有价值的,但是对于DB centric的应用却是个问题,因为在做任何事情之前和之后都需要传输数据。程序员需要明确地管理客户端和服务器端的通信,包括JPA游离实体(甚至是 序列化的)。这看起来象给许多耗时的副作用和技术问题敞开了大门。

我找到了Vaadin,丰富的终端用户体验,没有JavaScript,甚至没有客户端(从程序员的观点),没有JSP/Html,基于GWT。模型如此 有前途,非常值得一试。我下载下来,开始阅读教程。在2009年,我深入使用Vaadin有四个月 。Vaadin入门容易,很快获得回报,多亏:

1、好的API

2、完整的用户指南

3、例子

我必须承认,我花费了好多天在JPA/Hibernate集成方面。并不是说Vaadin和JPA有关联,而是我使用JPA的时候,和传统的Controller/View模式稍有点不同。Vaadin网站自带一个令人误解的例子,混合了UI代码和Hibernate sessions。我的主要问题是,当显示选择列表时,是否在Vaadin组件中保管游离实体。在Struts/JSP下,我当然不会在列表中保管实体。 现在,我知道在Vaadin中是保管它们的。要是能有一个现实的、精心设计的、基于Vaadin/Spring/Hibernate的小型业务应用就好 了。

在项目过程中,为了让多标签工作正常,我们花了一些时间用于正确地管理“windows”。Vaadin API可能会在V7中改进这一点。

最后,我们也花很长时间改善网站的性能。我们犯了一些错误,比如没有压缩GWT产生的JavaScrit。我们也限制了内嵌Vaadin visual components的使用,因为JavaScript执行沉重页面耗费太长时间。Server/Client数据传输不再是问题,但是Vaadin JavaScript重新整理复杂页面中的元素需要耗费太长时间(就像我们的网站主页)。例如,在参考手册里面,你可以注意一下long和short两个 页面装载时间的不同。对于一些评论页面,我们没有使用繁重的Vaadin布局,而是用纯粹的html。主页的事件列表就是这样(右栏)。一个事件典型地包 括一行带链接的文本和一个用户图片。我们编码html用来生成一个事件。为了习惯框架的边界需要一些时间。也就是说,手写html还不到我们Vaadin应用可视部分的1%。

不是每件事情都是容易和直接的,但是多亏高质量的API、product、source code、documentation和forum。

在使用Vaadin最初四个月,和之前相比我们的生产力有了很大提高。

简单问题变得非常容易和自然,复杂问题也变得合理。在论坛中,对于我们的问题总能在24小时内得到睿智、精确的答案。这也让我们有点过度使用论坛。

在Struts/JSP/JavaScript下,有缺陷的编程模型和一些技术问题过去常常减慢我们的速度,这也留给我们大量时间去思考页面布局和功能 需求。自使用Vaadin之后,开发UI是如此之快,以至于我不得不强迫自己停止编码,为的是有时间去思考布局和应用特征。

十分感谢Vaadin团队,他们的工作非常伟大,我要告诉他们:对于选择Vaadin,我绝不后悔!