当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 浅析Ajax为什么优于JSF

Javascript
javascript 新浪背投广告实现代码
javascript 选择文件夹对话框(web)
JS 自动完成 AutoComplete(Ajax 查询)
javascript scrollLeft,scrollWidth,clientWidth,offsetWidth 完全详解
jQuery 插件开发 其实很简单
最简单的jQuery程序 入门者学习
javascript 读取xml,写入xml 实现代码
JQuery 实现的页面滚动时浮动窗口控件
javascript 动态加载 css 方法总结
javascript 表格左右收缩
jqurey 学习笔记 传智博客佟老师附详细注释
javascript dom 操作详解 js加强
JS 动态添加列表框项效果代码
Javascript 事件流和事件绑定
Google Map Api和GOOGLE Search Api整合实现代码
9个javascript语法高亮插件 推荐
Prototype String对象 学习
javascript ImgBox透明遮罩层背景图片展示
javascript FAQ函数(提问+回复)
jQuery TextBox自动完成条

Javascript 中的 浅析Ajax为什么优于JSF


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 357 ::
收藏到网摘: n/a

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在这场角逐中只不过是一个小角色。