realazy


Ajax, 用该所用

我经历的一个项目倒下了。倒不是因为技术落后,反而是因为技术太过先进——整站,所有前端页面都是Ajax处理而产生的。

我们现来看看Ajax是啥(汗,你以为读者是白痴咩~),根据发明人Jesse James Garrett (jjg)adaptive path的一篇文章Ajax: A New Approach to Web Applications中定义,Ajax由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含:

  • 基于XHTML和CSS标准的表示;
  • 使用Document Object Model进行动态显示和交互;
  • 使用XMLHttpRequest与服务器进行异步通信;
  • 使用JavaScript绑定一切。

可以看到,这是一种以JavaScript为核心的技术,从广义上说,除了服务器端技术,剩下的都是Web标准。

但上一句话并不是重点,做Web标准的读者不用窃喜 XD。

我们来了解一下Jesse James Garrett的背景,他著有一本有名的书,叫做The Elements of User Experience - User-Centered Design for the Web. 啥?User Experience? 没错,jjg是一位资深用户体验专家。

我没有深入调查过,但我身边的人,接触并运用Ajax的清一色都是程序员。我对程序员当然没有什么成见,但术业有专攻,程序员看到这个Ajax定义,理所当然是从技术上入手,为新技术滥用Ajax不亦乐乎无法自拔而不自知,为Ajax而Ajax,忽略了非技术层面的东西,比如,用户体验亲和力(accessiblity)。

所以我认为jjg对于他自己发明的Ajax的定义是不及格的。实际上,按照jjg本来的意思,技术也是为用户体验服务的。About Face 2说,Web的出现让交互设计至少倒退十年,Ajax的出现实际上为了弥补这十年而生,让Web界面操作可以一样或至少接近“正常软件”的操作方式。但jjg的定义对技术层面的东西阐述过了头,缺乏用户体验背景的程序员只能依瓢画葫芦,为Ajax而Ajax。

所以我觉得,哪里该用Ajax,怎么使用Ajax,如何才能做到符合用户体验的需求,这是产品/策划的事情。事实是很悲哀的,产品认为这属于技术问题(至少我身边所碰到的情况都这样)而不加过问。我们可以看到很多大举2.0旗帜的网站,看起来很酷,用起来很苦。漫长的等待没有提示,用户未知情的情况下刷新内容,鼠标一不小心就会犯错,不能后退(这倒是普遍问题),不能撤销等等,很多用户患上了2.0恐惧症

由于我实际上对用户体验并没有研究,不好夸大其词,不好妄加评论,上面只是我的个人想法,有错的话各位看官一定要批评指正,一起学习,共同进步。我着重谈谈亲和力的问题。

众所周知,JavaScript不是什么时候都能用。老旧的浏览器,高安全的环境(比如银行,或者用户设置),文本浏览器(如lynx, w3m),屏幕阅读器,手机浏览器等等,很多场景都限制了JS的发挥与使用。对于正常人,你可以觉得无所谓,反正现在换个或者升级浏览器也是轻而易举的事情,但是,很多障碍人士,却只有很少的选择。Web 2.0并不意味不能用

所以我们必须采取适度降级(graceful degradation)的策略。对于一些非必须由Ajax驱动产生内容的前端页面(比如分页,提示内容的展示),我们就可以采取此策略。我们必须保证,在没有JS的情况下,这些内容可以使用传统(Web 1.0?)的方式来交互产生。这是保证Web具备亲和力的基础。有此保证后,我们就可以采取逐步增强(progressive enhancement)的策略来加入Ajax,使用JS来控制前端的交互,达到用户体验的目的。实际上,读者的疑问可能就在这,如何能够保证适度降级的基础上能逐步增强?实践证明,Unobtrusive Javascript(不冒昧的Javascript? 天,这该怎么翻译?)的思想能够帮助我们做到。何谓Unobtrusive?那就是说,在没有JS的情况下,网页内容依然能够访问(accessible)。概念很抽象,那么我们举个例子说明吧。假如网页有几块内容:

<a href="#a">Show a</a> <a href="#b">Show b</a> <a href="#c">Show c</a>
<div id="a">a</div>
<div id="b">b</div>
<div id="c">c</div>

我们需要按照用户的点击展示每一块内容。通常的做法是,我们会给a标签加上占位符,然后写上onclick=""之类的代码,在某些div加上style="display: none;",让其在默认情况下不可见,然后再让JS操纵其可见性。这是一种不好的,非Unobtrusive的做法。

Unobtrusive的做法是,我们需要让a有意义,而不是只为JS而存在。a应该依照实际情况指向一个实际连接,或者跳到本页的一块内容。我们应该讲JS完全分离出来,不要在HTML混杂onclick之类的事件代码。而且,我们也不应该在默认情况下隐藏内容,应该在页面载入后交给JS来控制,这样,用户在没有或禁止掉JS的时候,她/他还有机会能够看到所需的内容。这是一个最简单的Unobtrusive例子。

所以,结论是,我们要建设具备亲和力的Web 2.0的网站,graceful degradation, progressive enhancement, Unobtrusive是基础。当然,某些完全依靠Ajax的网站,比如Google Maps,得另外讨论。我们可以看到,即使是Gmail,它也有一个非Ajax版本备用。当然,我的意思不是每个网站都应该开发、维护两个以上的版本,我们应该,在保证亲和力的基础上,才逐步Ajax化,而且Ajax应该是用在构建一种新的交互方式,用在用户体验上。

21 Responses to “Ajax, 用该所用”

  1. nic Says:

    说的好,我现在最怕的就是Blogger.com的WYSIWYG编辑器,插入一些代码特别烦琐,还要手动修正,而且一不小心就消失的无影无踪。我现在都在记事本里面连代码把文章一起写好了再帖上去,累啊!

  2. nic Says:

    对了,Ajax滥用的最成功例子:M$的Live Space,自从Live Space上线之后,我在Friefox中就不能留言了。安哥,不如你想个解决办法,发给M$,没准,嘿嘿,又换工作了呢……到时候请吃饭啊。

  3. PorkFat Says:

    um…部分认同
    我认为这是项目中缺乏交互设计的硬伤,就如Alen Cooper在”The Inmates Are Running the Asylum”的谈论(书名真是形象,恰好就是realazy描述的这种状况)
    Ajax是和交互设计密不可分的技术,把交互设计的工作抛给程序员,这实在非明智之举

  4. Momoca Says:

    看完了.很多还不是很懂,接触AJAX也不是很长时间.但是文章很好.我要转过去以后仔细学习.

  5. mike Says:

    到最后还是代码重用的问题

  6. gonefish Says:

    现在有很多的框架,里面都提供一些非常漂亮的动态效果,让程序员们眼前一亮,当然我也不例外。项目发发需要,大部分都是使用框架,恐怕不会发再细节吧,而且在项目中并不是按着你的思路前进的。期待你对accessiblity方面的文章。

  7. Evance Says:

    目前ajax可以拿来玩概念…
    大量的ajax应用..看看有什么限制?
    计算机配置,浏览器,浏览器版本,用户人群.着还是外部的,
    再看看内部限制:
    程序的效率,良性交互等等

    嘿嘿..
    大量的运用ajax,除了高技术型人才加优秀的设计师,谁敢顺手拈来用?

  8. lovoror Says:

    为什么你的标题还要带个链接?

  9. Hanry Says:

    首先,对作者的专业精神十分敬仰。

    其次,作者的UE用的很好,我在阅读你的文章后,再看到分类,归档,友情链接等等。 像我一样的普通人首先都关注文章本身,看完了觉得好才看其他。作者充分理解到了这一点。很多的细节都显示了作者的一个原则:让用户觉得爽。

    最后,按下了底部的XHTML键,发现如下问题。
    Failed validation, 5 errors

    作为国内标准化先锋,请作者留意小细节。

  10. Ayuleo Says:

    用得好就叫酷,用多了就变成滥了,一旦变滥,就变成讨厌了。
    相信每个人都希望你的新装走出街是唯一的,特别是女孩
    UE及UI都不应交给程序员,UE和UI与程序应该多沟通,而不是设计出来后就全盘交给程序员,什么都不管了。不过,现在的相当一部分所谓的网页设计师,是什么都全包的……

  11. awflasher Says:

    此乃好文。

  12. awflasher Says:

    其实此文中心思想就是说,Ajax根本就不是一种技术^_^ ~~ 不知道理解的对不对哦

  13. 夏天 Says:

    我坚定地相信,当用则用,合理使用~~~呵呵

  14. test Says:

    感觉是设计的理念更重要,技术…现在的技术几乎等于,查找,复制,粘贴,讨论+一些修饰。为什么有些网站仅仅用静态的html+js就能做得让我们叹为观止。技术新很好,但设计理念跟进同样重要

  15. Aether Says:

    @Hanry:我认为,验证是有力的辅助手段。但是,如果满足了用户体验,满足亲和力,满足可用性,满足了代码的可读性可扩展性……,那么让该死的验证去该去的地方吧。

  16. Fantastic Day » links for 2006-10-12 Says:

    [...] Ajax, 用该所用 (tags: ajax blogging) [...]

  17. Yang Says:

    今天发现你的”关于"变了!
    以前的那个关于多亲切啊

  18. 笑容 Says:

    你是通过项目发现,ajax不能滥用,要用到合适的地方。
    我是从一开始就意识到了。
    可是你在项目中发现了这个问题。
    而我在你做项目的时候,什么都没有做。

    ……

    呵呵

  19. 名字? Says:

    学习中。。。

  20. 遥遥 Says:

    足够的预留退路,这在Jeremy Keith 的那本DOM编程艺术里不只一次的提到过。

  21. 只看优点 Says:

    太过龟毛了。 感觉你是为技术而技术。 而大多数人学习技术是让他来帮我们完成我们想做的东西。 并不是一个非要符合什么原则的艺术。 按你这个说法本来两个月可以完成的项目非要在研这些标准和原则上花个5-6个月。 程序员不学个5-6年是不可能写出程序了。

Leave a Reply


realazy (懒到死) is proudly powered by WordPress | Entries (RSS) and Comments (RSS)