AJAX到底带给了我们什么?

我是一个坚定的B/S的支持者,我也深信不疑Web将会统治未来,成为未来90%以上的信息发、布获取渠道[有人也许会说那是电视报纸,报纸我不敢攻击,不过电视未来很可能是IPTV)。未来大家不会在意操作系统这个平台,大家不会去争论你用Windows,我用Mac,他用Linux(虽然我用过两年的Linux并且很喜欢它,不过它真的对普通用户难有吸引力),或者是她用iPhone/gPhone。这些都不重要,重要的是我们都可以通过Web获取信息,获得应用。如果说未来有一个平台,那就是IP/HTTP/WEB/Browser。

 

      回想一下在AJAX流行之前的网页是什么样子的?可能大家不记得了,其实我也不记得了。不过那时候很难想象Web应用可以做到今天这种程度。虽然Web应用还是比桌面应用的交互性差,可是现在可以说使用起来已经很方便了。我觉得Google Office, Gmail这些应用的可用性,基本上我觉得可以称的上不错了。这些,其实都要感谢AJAX在背后的贡献。那么AJAX到底给我们带来了什么呢?

 

       通过这一个多月的开发经历,我深刻体会到AJAX给了你一种能力,让你的Browser表现的像一般地客户端,和服务器交互;不,还给了你一种全新的方式,来思考设计和开发你的Browser应用。其实,只不过以前我们做CS开发的时候,Client我们是跑在操作系统或者虚拟机上的,和服务器之间一般跑着私有的自己设计的协议。很多都是直接在Socket/TCP之上自己设计的协议。而AJAX,给了我们一种方法,让我们的Client跑在Browser里面,协议是在HTTP上自己设计的私有协议。

 

       也许,在开发方式上观念的转变远没有设计角度转变那么深远,我觉得AJAX带给我们的是一种全新的视角去设计我们的Web应用。随着JS框架对AJAX越来越强大的支持,我们可以将更多的精力放在用户体验上面。其实这就是AJAX或者说Web2.0的初衷,用户的体验。也是所有做软件人的终极目标,给人们更好的体验。

 

       也许空说大家没有什么感性的认识,那么我们来举个例子。我们有个简单的应用,就是要呈现给客户他的聊天记录。我们看过很多聊天记录的展现方式。譬如QQ/MSN,不过我发现他们有个共同的问题,就是是以Message为单位的。这样做固然很简单,可是,可是其实每条消息它都是有上下文的,所以最好的方法是以Conversation的方式来展示聊天记录。每个Conversation有参加者,时间(开始时间就可以了),Tag(Label)。然后你点开每个Conversation条目,就可以看到这个Conversation里面的聊天记录。如果是以前,我们可能需要每次点击Conversation条目,然后就需要后台返回一个新的页面。这样速度慢,流量大不说,关键是每次刷新的那种感觉对用户很糟糕。而有了AJAX,我们把所有的Conversation条目存在内存中,用户点击一个条目,通过AJAX获得这个Conversation的Message,然后存到内存中,然后展现给客户(我们可以用很漂亮的动画展现)。当客户点击下一个Conversation条目的时候,上一个条目的Message仍然保存在内存中,下一次如果它再点这个条目的时候,我们就不需要到服务器去取了。[当然要注意内存耗费太大的问题,可以定期清理]      

 

       不过AJAX也有一些缺点。首先就是复杂,大家可别小看这个缺点,复杂就意味着更容易犯错误,更多的Bug,对老板来说就意味这要花更多的Cost;其次就是不能滥用。这有两方面的意思。一就是不要一个页面N多地方都不定时的给后台发送请求,你可以重构这样的设计;二就是要让AJAX真得提高用户的体验,而不是你在那里眩酷,这没有意思;三,我们是在浏览器里面做东西,和客户端还是不一样。譬如一个case,有些应用客户端需要注销。如果你自己做得Client,你可以在点击关闭按钮的时候,做注销的事情。如果服务器那边返回注销成功,你就让客户端退出;如果不成功,你就可以让客户端再注销一次。可是这个在Browser里面你就不可能了,客户关闭窗口,你是可以得到Window.onunload事件,可是你没有机会去判断你的结果;最后一个缺点也是天然的缺点,Http是单向的,也就是服务器没办法以中断的方式给Browser发消息(我知道AJAX PUSH, COMET, Web Socket,可是他们本质上还是单向的Http)。

 

         接着这篇文章,我想说,可能未来Flash/SilverLight, WAP这种过度产品也会go to hell。HTML5(据说还要10年,不过我觉得有Google在,估计4年左右会现端倪)会是我们的未来。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注