也来说说Ajax的事儿

现在如果你问别人“最近两年在Web开发领域最火的技术是什么”,Ajax这个词应该能占据一席之地。确实,自从05年底被提出,Ajax技术就以难以想象的速度迅速红遍大江南北,受到无数Web开发人员的青睐和追捧。而各种平台下的Ajax框架更是如雨后春笋般向外冒,以至于连微软这样软件业的巨头也迫不及待推出自己的框架——ASP.NET Ajax,并将其作为标准组件集成于VS2008中,想藉此讨好那些已经一听见Ajax这个词就热血沸腾的Web开发人员们。

当然,有赞美就会有责骂,Ajax也不例外。在它蓬勃发展的过程中,也遭到了不少非议,很多人提出使用Ajax技术会导致系统性能下降甚至用户体验的破坏。并列出很多理由,藉此呼吁广大Web开发人员回归传统Web开发。

我算是比较早接触Ajax技术的,当时我还在进行PHP开发,听到Ajax技术这个新名词后就想弄明白是什么东西。当时资料比较少,没有现在这么多关于Ajax的书籍和框架,我手头只有一本《Ajax基础教程》,还好,Ajax技术本身不算复杂,所以我还是很快弄懂了它的基本原理,并且马上应用到一个当时正在做的PHP项目中,用来做无刷新登录和数据验证。像很多备受同步刷新限制之苦的Web开发人员一样,当时我对这种神奇的异步交互叹为观止,于是开始无休止的研究。但是研究来研究去,我总觉得Ajax不过就是那么个东西,没什么太复杂的,只不过编写JavaScript比较痛苦罢了。直到后来我看了《Ajax实战》这本书,思想才大为改观,我才明白,原来Ajax也可以有这么多模式性的东西和性能方面的考虑。Ajax发展到现在,已经开始趋于成熟,那种刀耕火种从“HttpXMLRequest”写起的开发人员已经不太多了,但是对它的争论却没有停止。在这里,我也想结合我的经验,对Ajax技术提出一些个人观点,有不当之处,欢迎指正。

1.为什么要使用Ajax
很多人看到这个问题可能会觉得我很白痴:这还用得着废话吗?当然是为了实现异步交互的Web富应用系统了。但是,这里我想说的不是技术层面的,而是思想层面的,也就是,我们使用Ajax的思想动机是什么?如果不弄明白这个问题,我们有可能会患上“Ajax狂热症”——在应用中狂用Ajax,从数据验证到登录,再到页面无刷新更新,弄的整个应用几乎一次都不用刷新就可以完成所有工作,最后他开发的系统中充满了无法维护的JS代码,并且搞的使用系统的用户莫名其妙、精神错乱,最后崩溃。这样的例子并不少见。发生这样的情况,根本原因就是开发人员没有弄清楚我们为什么要使用Ajax。

我个人的观点是:Ajax可以存在于应用中的理由只有一条,那就是使用户体验得到改善。换句通俗点的话,就是使用户在用这个系统时觉得更爽。我们可以想想,Ajax给我们带来了什么?首先是增加了开发难度和代码维护难度。如果谁说他用Ajax后开发变简单了,我只能说这人是神人。用过Ajax的人一定会感觉到,使用了这项技术后,系统开发难度和复杂度陡然增加,即使是使用框架。其次,Ajax使得系统消耗加大,客户端不用说了,本来的“瘦客户端”在使用了Ajax后“胖”了不少,跑起来体能消耗自然加大,而有时由于不当的使用(例如在数据验证中,在文本框的change事件中调用后台验证,这会导致每输入或删除一个字符都访问服务器,输入一条信息可能访问了几十次服务器),也增加了服务器的负担。那么,我们付出这么大代价究竟是为了什么?那就是为了让用户有更好的体验,如果我们增加了开发难度,加重了系统消耗,最后又破坏了用户体验,那么我们是何苦呢?所以,我希望每个使用Ajax的开发人员(特别是Ajax初学者和喜欢无处不用Ajax的狂热份子),在每次使用Ajax的时候,先问问自己:这里加入Ajax后用户用起来是更舒服了还是更难受了?如果是后者,请毫不犹豫打消在这里使用Ajax的念头。

2.是否需要使用Ajax
上文我曾说过,使用Ajax的唯一理由是用户体验得到改善,但这并不是说只要能改善用户体验就一定要用Ajax。有时我们还要考虑为此付出的代价。(当然,如果你说只要用户舒服,付出再大的代价也在所不惜,那么我只能说佩服你,也许你应该考虑转行做慈善)首先要考虑的就是我提到过的复杂度和性能两个问题。这两个问题和用户体验永远是矛盾的,用户体验越是好,开发难度就越高,而且系统开销也大,这是无法调和的矛盾,我们只能使用折中策略,根据具体的情况找到一个最佳契合点。

例如,如果客户给的Money较慷慨,而这个系统访问也不太频繁,而且使用自己的服务器,那么我们可以考虑把天平向用户体验一边倾斜。但如果遇到一个很小气的客户,而且系统对性能要求很高,那你使用Ajax的时候就要小心了,如果你使用了过多的Ajax技术,并向客户大谈这个系统用户体检多么的好,也许这个客户并不领你的情,可能还会责怪你系统运行太缓慢或延误了交付日期。

所以,一个系统中用不用Ajax、用多少Ajax,都没有一个统一的量度,需要你根据具体情况进行权衡。所以,在你准备开发一个含有Ajax的Web应用时,请仔细考虑这个系统在用户体验、性能和开发复杂度方面各占多少权重,然后找到一个最佳契合点。避免性能第一、坚决不用Ajax的“Ajax恐惧症”和Ajax无处不在的“Ajax狂热症”。

3.如何提高Ajax的使用水平
如果说前两点是使用Ajax应遵循的硬性规则,那么这里讲的就是如何更好的使用Ajax的软性条件了。

Ajax是个好东西,但也取决你怎么使用。如果你遵循了本文上述两点,我想在大面上就已经没问题了。但是还有很多值得思考的地方,例如你的Ajax应用是不是系统消耗最小?有没有更好的开发方式?能不能让我的JavaScript代码更好维护?以下给出的几个Tips,也许对你提高Ajax开发水平能有帮助。

  • 请学好学精JavaScript,这是你使用Ajax的资本,如果想真正精通Ajax,并开发出优质的Ajax应用,这就需要你精通JavaScript。
  • 请无论如何把DOM是什么搞清楚,要知其然、知其所以然。
  • 尽量使用标准化布局,把结构和表现相分离,这样对你开发优质的Ajax应用以及降低开发难度有极大好处。
  • 平时多思考一些Ajax的东西,提高自己的思想层面,而不是只会闷头写代码。
  • 多读一些关于Ajax的好书,例如《Ajax实战》、《Ajax设计模式》等。
  • 提高自己的后台开发能力,虽然Ajax主要在前台开发中使用,但是在一个系统中前后台是相辅相成的,提高后台开发水平对你的Ajax开发大有好处。
  • 虽然JS很古怪,但是请尽量使用面向对象思想写JS代码。请认真对待JS代码,写之前也要经过仔细的设计,要向后台代码一样注重其可复用性、可扩展性和灵活性,代码规范也必不可少。
  • 不要太依赖框架,特别是ASP.NET程序员,只靠拖动几个控件也许能开发出Ajax应用,但是绝对开发不出好的Ajax应用,手写JavaScript不可避免,当然ASP.NET Ajax框架客户端对JS的扩展使得你可以更方便的编写JS,也可以让你写JS时使用更多OO思想。
阅读更多
个人分类: Web开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭