首页 > 编程 > JS > 正文

浅析Ajax为什么优于JSF

2020-09-19 11:01:59
字体:
来源:转载
供稿:网友
sun为什么会搞出一个jsf,jsf为什么会是现在这个样子,我想原因是这样的:首先,基于组件的web开发将来会是一个趋势。自包含的组件便于ide的处理,可以提高开发效率。

 

就是说jsf优于struts/webwork这类mvc框架的优势,在于它可以与ide结合来自动生成代码。而传统的纯手工编写的mvc框架,影响了开发效率。因为java技术在客户端并没有明显的优势。applet已经被抛弃掉,java的强项在服务器端。sun不可能跑去使用javascript,因为在传统开发者眼里,js只配做一点很琐碎的任务。

 

于是在他们设计的这个架构中,所有的用户事件都放在了服务器端来处理,这个决策造成了jsf致命的缺点。它把事件处理模型绑死在服务器上,限制了响应性更加灵敏的交互设计。随之而来的网络延迟会毁掉软件的可用性。这也是ajax在jsf的架构中无法充分发挥作用的原因。

 

jsf的设计思路有点模仿vb,组件化的开发这个方向是没错的,ajax开发将来也会走这条路。但是jsf与vb最大的差别是vb的事件模型都是位于本地来处理的。这是一种本质上的差别,所以如果jsf确实想模仿vb,那也是东施效颦。而且在jsf的设计阶段,同步的请求/响应是主流,他们的思路仍然牢牢束缚在基于页面的开发方式上。根本就没有思考过其他的可能。

 

异步请求/响应是ajax与传统开发方式最大的差别,异步带来了更好的交互设计。

 

在ajaxinaction第1章中作者举了一个令人信服的例子。googlemaps中当用户滚动地图时,获取新的地图图片,由于是异步请求的,因此不会打断用户的操作流程。而在传统的地图服务,每次滚动可能都需要刷新页面。用一下微软的那个地图服务就可以感觉到明显的差距,它甚至根本就不允许用户滚动地图。

 

http://terraserver.microsoft.com/

 

以前我说googlemaps不是ajax,因为没有使用xmlhttprequest,这样说看来理解有些狭隘。googlemaps请求地图的图片,采用的是修改动态创建的img元素的src属性的方式,这样的请求不会打断用户的操作,因此就是异步的。我们在ajaxinaction中看到作者将googlemaps当作ajax应用,而在pragmaticajax中作者说googlemaps不是严格意义上的ajax,两种说法都有道理。

 

jsf其实如果和applet结合,可能更好些。applet是多线程的,可以捕获用户的操作事件,采用异步方式发送到服务器。这样就不会打断用户的操作了。但是这样一来设计的这个架构就复杂了。而且applet是已经决定抛弃的东西。jsf和javawebstart结合也可以,不过jws设计用来建造一类完全不同的web应用,即richclient,而不是设计用来建造运行于浏览器之内的ria应用。所以jsf最多只是一种过渡方案,在ajax/flash的竞争下早已风光不在。

 

未来基于浏览器的ria开发,ajax、flash是两种最有前途的技术。

 

按照泽欣的判断可能是三分天下,ajax、flash/flex/laszlo、还有m$的atlas。atlas是m$开发的类似于flash的一种技术,目前还只是一个vaporware,没有看到其庐山真面目。javawebstart相比之下只能局限于一些内部应用。

 

将来位于客户端的表现层开发可能会完全没有java的位置,这是sun不愿意看到的,但是sun在这场角逐中只不过是一个小角色。 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表