2005年对于Web开发来说是一个伟大的年份。在这一年中,有两个技术异军突起,一个是Ajax,另一个是Ruby on Rails。这两个技术的出现改变了Web开发的面貌,甚至打乱了JavaEE前进的步伐。多年以来,JavaEE设计者们为自己所设计的无所不包的复杂架构而陶醉,新的buzz word层出不穷,一出来就会得到广泛的关注,相关的图书也会热卖。辉煌的JavaEE版图中居然还有完全被忽略的死角,这是JavaEE设计者们始料不及的。事实上他们在JavaEE的架构中从来就没有考虑过浏览器端的处理能力,浏览器对于JavaEE来说是完全无智能的瘦客户端。他们这样设计情有可原,因为他们只能把设计局限在Java能够控制的区域内,在Java Applet彻底失败之后,Java能够控制的区域退守到了服务器端。毫无疑问,JavaEE取得了巨大的成功,但是这种完全基于服务器端的解决方案很难向用户提供优秀的交互体验,同时也很难实现最佳的可伸缩性(Scalability)。
Ajax是用户和市场的选择,这个由群众创造出来的buzz word时常响在JavaEE设计者的耳边,令他们非常烦躁。甚至有人发明出了“JavaEE without Ajax”的口号,和2004年Rod Johnson所提出的“J2EE without EJB”相对应。但是仔细考察这个“without Ajax”,我们却发现它和“without EJB”说的并不是一个意思。“without EJB”的意思就是不使用EJB,而“without Ajax”的意思却不是不使用Ajax,而是设法将Ajax隐藏掉,使得普通的JavaEE开发者不需要学习Ajax。在这个口号的发明者所设计的JSF框架中,内嵌了一个Ajax组件库ExtJS,看来他们还是需要Ajax的帮助的。所谓的“JavaEE without Ajax”其实是一个伪命题,只是用来吸引眼球的噱头,主要的目的是为了迎合了一些讨厌Ajax、对于浏览器端脚本编程没有兴趣的的JavaEE开发者。其实无论开发Web应用,还是开发B/S结构的企业应用,交互体验都是非常重要的。在交互体验越来越受到重视的今天,想要把Ajax排除在外,可以说是一件不可能的任务。
尽管Ajax开发确实很重要,但是无须讳言的是Ajax开发,特别是DHTML开发至今仍然是一件很复杂的工作,必须具备专业的技能。除了高超的开发技能之外,还需要开发者对于Web可用性和交互设计具有足够的理解。这超出了Web页面设计师和制作人员的能力范围;而对于服务器端开发者来说,这些显然也不是他们的特长(他们的特长是处理业务逻辑和与数据库打交道,而不是界面开发和交互设计)。在Web页面设计师和服务器端开发者之间出现了巨大的断层,这使得高水平的Ajax开发者一下子变得炙手可热。
JavaEE设计者们简化Ajax开发的努力是可以理解的。但是我们需要讨论清楚一个问题:究竟怎样做才能真正简化Ajax开发?
在我看来,JavaEE社区简化Ajax开发的努力都不是很成功。将ExtJS嵌入在JSF框架中,确实可以实现一些简单的交互需求,但是这种做法其实阉割掉了Ajax主要的能力——直接在浏览器端处理用户的事件。JSF的事件模型是完全位于服务器端的,界面的任何改变都需要发送事件到服务器端做处理。即使引入了ExtJS,也不可能改变这一点。Struts2/WebWork和jMaki中通过使用taglib集成Ajax组件库的做法也感觉笨拙而不自然。之所以集成的效果不理想,是因为传统的JavaEE框架和Ajax组件库的核心架构设计都没有考虑到对方的需求,它们在架构设计上存在着内在的冲突,拉郎配的结果是可想而知的。这些JavaEE表现层框架集成Ajax组件库,是希望将Ajax组件库改造为JavaEE世界的顺民,服从JavaEE框架的架构约束,但是这样做不可避免地会削弱Ajax组件库的能力。要简化Ajax开发并且充分用好Ajax技术,仅仅使用taglib来对Ajax组件库做封装是不够的,服务器端的架构也必须加以改造,甚至需要设计出一套全新的架构,这是传统的JavaEE表现层框架无法做到的。Google的GWT同时具有浏览器端和服务器端,似乎是一个很好的选择,但是GWT主要是为实现一类One Page的Ajax应用而设计的,它模仿的是桌面应用的交互模型,而绝大多数的Web应用是不可能采用这种交互模型的。DWR也是一个跨浏览器端和服务器端的框架,但是DWR的RPC风格的API是我所不喜欢的。RPC架构和REST架构在可伸缩性方面的差距是巨大的,Ajax应用的最佳的架构是REST而不是RPC,同时REST在简化编程模型方面的效果也要比RPC更好。
要简化Ajax开发,我认为需要满足以下三个要求:
1. 由专业的DHTML开发者开发出的更加全面和强大的Widget库。这部分的开发应该由专业人士来做,这样就可以把负担从普通的Web开发者身上卸掉。开源软件是开发Widget库的必由之路。
2. Ajax组件库要与服务器端框架做更加紧密的集成。服务器端框架的架构需要加以改造以适应Ajax和REST的需求,不能指望以不变应万变。
3. 简化的编程模型。这包括两个方面:a) 通过与服务器端框架紧密集成,使得服务器端开发者仅仅使用服务器端编程语言就能够实现一些普通的Ajax需求。b) 更加复杂的交互需求如果必须要做DHTML开发,需要大幅降低DHTML开发的难度。
当我把眼光投向了Ruby on Rails之后,包括Ajax开发在内,一切都变得容易了很多。Rails通过其RJS模板集成了两个Ajax组件库Prototype和基于Prototype的script.aculo.us。Rails集成这两个组件库的方式显得非常自然,因为这两个组件库正是Rails和Ajax相结合的产物,它们都是由Rails的核心开发人员所开发的,充分考虑到了Rails在架构方面的需求。现在这两个组件库已经长大成人,完全可以独立应用在非Rails环境中。Rails + Prototype/script.aculo.us满足了上述三个要求,因此是目前做Ajax开发的最佳组合。当然,上述三个要求每一个都还有很大的改进余地,但是Rails + Prototype/script.aculo.us走在了正确的道路上,前景是非常光明的。
随着Ajax技术的普及,传统的DHTML组件库恢复了生机,并且加以改造以适应新的交互需求。这些DHTML组件获得了一个时髦的新名称——Widget。我一般是将Ajax组件库分成三部分:
1. 基础库。包括:a) 对于JavaScript语言的增强,为目前浏览器所支持的JavaScript 1.x版提供继承、包管理等等面向对象编程所需要的支持。b) 封装HTML DOM的API,提供编程模型更加简化的API。
2. Web Remoting库,通过XMLHttpRequest/IFrame/JSONP等等机制与服务器交互,从服务器获取数据。
3. 丰富的Widget库,用来实现各种交互需求,改善用户的交互体验。
Prototype库实现了第一部分和第二部分,script.aculo.us库实现了第三部分。在这三部分中,开发工作量最大的是Widget库。正是因为市场上对于Widget库有着巨大的需求,在2007年涌现出了大量Widget库,开源的包括script.aculo.us、Dojo、YUI、ExtJS、Mootools、jQuery UI、Spry、Tibco GI、Qooxdoo,私有的包括ASP.NET Ajax、Dorado、Zimbra等等,全部列举下来不下2、30个。Apple公司在这一年推出了iPhone手机,其中的Widget全部是使用DHTML开发的,达到了交互体验的极致,同时也展示出Widget开发的美好前景。很多人说2007年是Widget年,这个说法是有道理的。到了2008年,Google公司推出了Open Social,其核心是Google所提供的Widget开发API和Widget的部署容器。Google管这些Widget叫做Google Gadget,Gadget将Widget的开发水平推向了新的高度。
无论是基于现有的Widget开发Ajax功能,还是开发新的Widget,Prototype/script.aculo.us都是我们手中的一件利器。网上的很多投票都显示出,Prototype/script.aculo.us组合是最受欢迎的Ajax组件库。因为Prototype大受欢迎,其爱好者基于Prototype还开发了很多其他的组件库,Prototype家族成员的数量还在不断增加。很多Ajax组件库最大的问题是缺乏详尽的文档,API参考并不能代替文档。从文档的数量和质量来说,Prototype/script.aculo.us的文档在所有Ajax组件库中都是最棒的。《Prototype and script.aculo.us中文版》这本书的出版,为爱好者深入学习这两个组件库提供了极大的便利。这本书的副标题是“You Never Know JavaScript Could Do This!”,确实,正是通过这些优秀的Ajax组件库、这些勇于探索的Ajax顶尖高手们,我们才知道浏览器端脚本编程的世界原来是如此灿烂。基于Prototype/script.aculo.us做Ajax开发是一种很愉快的体验。学习越深入,这种愉快的感觉就越强烈。那么,你还在等什么呢?
分享到:
相关推荐
《Prototype和script.aculo.us终极揭秘》是一本深入探讨JavaScript库Prototype和script.aculo.us的专业书籍,旨在帮助开发者掌握这两个强大的工具,提升Web应用程序的用户体验和交互性。这本书的试读样章为我们提供...
ajax的两个框架,prototype是一个非常基础的框架,它对JavaScript固有的对象进行了扩展,还提供了若干自定义的类和对象,帮助...对于中小型的Ajax应用项目应用项目而言,prototype+script.aculo.us是一个非常不错的组合
《Prototype与script.aculo.us:深入理解与应用》一书为读者提供了全面而深入的JavaScript框架知识,尤其针对Prototype和script.aculo.us两大框架。本书不仅涵盖了基础概念,还深入探讨了高级编程技巧,旨在帮助...
《实用的Prototype与script.aculo.us》一书由核心团队开发者安德鲁·杜邦(Andrew Dupont)撰写,深入探讨了Prototype与script.aculo.us这两个JavaScript库的关键方面,为读者提供了一次全面且深入的学习体验。...
《实用原型与script.aculo.us》(Practical Prototype and script.aculo.us)是一本由安德鲁·杜邦(Andrew Dupont)编写的关于JavaScript框架Prototype和其扩展库script.aculo.us的专业书籍。该书于2008年出版,是...
在提供的Pragmatic.Prototype.and.script.aculo.us.Dec.2007.pdf文件中,你将找到关于这两个库的详细教程和案例研究,包括如何导入和初始化库,如何使用它们提供的各种API,以及如何解决可能遇到的问题。这份资料...
《实践指南:Prototype与script.aculo.us》是一本由安德鲁·杜邦(Andrew Dupont)编写的书籍,出版于2008年6月。本书旨在帮助读者全面掌握Prototype和script.aculo.us这两个JavaScript库的应用技巧,并通过作者作为...
### Prototype.js 和 Script.aculo.us 知识点详解 #### 一、Prototype.js 概述 **Prototype.js** 是一个非常优雅的 JavaScript 基础类库,它为原生 JavaScript 提供了大量的扩展,使开发者能够更加高效地进行 Web ...
《Pragmatic Prototype and script.aculo.us Dec.2007》是一份关于JavaScript和Prototype库的教程资料,发布于2007年12月。这个资源旨在帮助开发者更高效地利用这两种技术来创建交互式的Web应用。JavaScript是一种...
**script.aculo.us库介绍** `script.aculo.us`是一个基于JavaScript的库,它扩展了浏览器的HTML元素,为Web开发者提供了丰富的用户界面组件和动态效果。这个库是Prototype JavaScript框架的一部分,它使得创建交互...
`script.aculo.us`是 Prototype JavaScript 框架的扩展,由Thomas Fuchs创建。它提供了丰富的UI效果和行为,包括滑动、淡入淡出、拖放、弹出框、下拉菜单等,同时支持自定义事件处理和动画。这个框架的亮点在于其...
本书不仅包含了对Prototype核心功能的详细介绍,还涉及了与之紧密相关的用户界面库script.aculo.us的应用技巧,为读者提供了一个全面的视角来理解这两个工具在实际项目中的应用。 #### Prototype简介 Prototype是...
Script.aculo.us是一个功能强大的JavaScript库,专注于提供丰富的用户界面交互效果与控制组件。它最初是为Ruby on Rails项目设计的,但其灵活的设计使其可以与其他Web开发框架兼容。该文档基于2007年6月12日的wiki...
Script.Aculo.Us开发系列教程,来自CnBlog的文章,本人搜集,下载,打包,o(∩_∩)o...
解压密码在:http://www.pin5i.com/showtopic-php-and-script.aculo.us-web-2.0-application-interfaces.html
基于Prototype框架的一个非常优秀的开源Ajax框架,封装了许多控件:AotuComplete,Accordion,Slider等,很多的动画效果,还有拖拽,DOM Utility等等 刚才在Download里面Search了一下好像没有,所以传上来一个,这个...
Prototype是一个强大的JavaScript框架,而Script.aculo.us则是在Prototype基础上构建的一个动画和用户界面库。 ### Prototype库 Prototype的核心目标是扩展JavaScript的基础功能,使得在浏览器环境中进行对象导向...
**前端项目-scriptaculous.zip** 是一个包含script.aculo.us库的压缩文件,这是一个历史悠久的JavaScript库,专门用于提升Web应用程序的用户界面效果。在Web开发领域,前端项目通常是涉及HTML、CSS和JavaScript的...