英文名:Ajax in Action
中文名: Ajax在行动
本章内容
可用代码的关键特性
通用的通知功能
可重用的通知框架
在原处突出显示更新过的数据
在第1章,我们所讨论的可用性是所有软件应用的重点。无论你将代码组织得多么得好,或者是应用的编写方法是如何得高明,如果它的可用性不够,你就会给用户留下很坏的印象。这虽然有一些不合理,但是生活就是这样。大多数人对爱因斯坦的印象是他不修边幅的外表和蓬乱的头发,而不是试图去理解他试图解开空间-时间的本质所作的工作。抓住用户的第一印象,并且关注细节,这真的很重要。
在第2章到第5章中,我们介绍了很多很酷的技术,并且使用Ajax完成了一些了不起的任务。本书接下来的章节的焦点就将集中于如何灵活地、适应性极强的完成这些工作。到目前为止,我们的例子都比较简单,只关注一些技巧性的功能实现,现在我们需要回过头来评估以前所做的工作,将其转变成人们真正想要的东西,而且这些东西他们可能每天要使用好几个小时。本章的主题将一步步地帮助你,使得你的Ajax应用可以真正满足真实世界的需要。
为了让用户感觉舒服,你能做的一件最重要的事就是时不时地以一致的方式通知他们后台到底发生了些什么。这些不是可用性的全部内容,但是我们在本章中将会重点讨论这些内容,看一看深入而一致的通知风格是如何使整个应用受益的。大多数的Ajax应用也需要在一些时候通知用户,所以我们希望这些已完成的组件也能用于你自己的项目中。
在本章中我们开发了几种方法,这些方法能够在不打扰用户工作的同时,让用户明白程序正在做什么。在介绍这些内容之前,先快速了解一下质量的含义以及如何做到这些。
6.1做正确的事:开发高质量的应用
可用性是Ajax特别关注的热点,因为Web应用的用户通常是薄情的。应用可以零成本地下载并且运行的后果就是,用户一旦不再喜欢这个应用,就会将它弃之如履,因为他们可以毫不费力地接着使用Google所提供的八百亿个网页中的下一个。复杂性的进一步影响是,使用Ajax我们可以看到两种不同的可用性传统结合到一起了,那就是桌面应用和网页。两者的正确结合是不容易的,如果结合得不好甚至会适得其反。
在第1章中,我们从用户的观点来看待可用性。在医用中他们需要什么?可以忍受什么?我们将这个问题反过来看,问问自己为了达到可用性的目标,我们的代码需要具有什么样的质量。以此为起点,可以分析出为了使医用很好地工作,我们该如何做。下面的章节详细介绍了使应用具有高质量的一些关键特征。
6.1.1响应性
最让计算机用户感到沮丧的是,计算机无法跟上他的思路,使他的工作不得不暂时中断。一些基本的设计错误会使用户无法跟踪他的工作,因为它所使用的笨拙的计算机硬件使他在操作所关注的领域模型时产生了思维间隙,比如说在写一个很长的配置文件时整个用户界面却被锁定了。
提到相应时,充分理解你的目标用户,并且了解其系统的典型配置是非常重要的。就写配置文件这种情况来说,如果开发者使用配备了高速7200转/分钟的SATA硬盘的工作站时速度是可以接受的,但是在将文件写到一个拥挤的网络上或者是写到U盘上时他们却可能会有另外一种不同的体验。特别是在开发Web应用时,一些相似的错误经常会犯,例如,只是在回送接口上对应用程序进行测试,即Web服务器和浏览器运行在同一台开发机子上。这并不能得出对网络延迟的有用的评估结果,所有的Web应用应该在一个实际的LAN或者是WAN环境中进行测试,或者是使用一个通信流生成工具来进行仿真测试。
除了网络方面的情况外,客户端代码的性能也会对程序的响应性造成很大的影响。性能是一个大问题,我们将在第7章进行深入的研究。
6.1.2 健壮性
应用如果能应付繁忙的工作站上通常出现的情况就可以说是健壮的。但是它将如何处理网络消耗呢?如果一个糟糕的应用占用了CPU五分钟,你的应用程序还能继续运行吗?在我最近参加的一个项目中,我们为了测试应用程序的健壮性,在键盘上胡乱敲击了约10分钟欧冠,并且用鼠标在页面上到处乱点。一个很残酷的测试,但是很有效,也很好玩。
这种测试能说明什么?至少,它能找出时间处理代码的不足指出。键盘的敲击、鼠标的移动以及诸如此类的时间需要很快的响应,因为这些事件很容易频繁的发生。而且,它们也能找出组件间不紧要的关联。在GUI中会出现一种特定的情况,例如一个模态对话框会阻塞对主应用程序的访问,而一个打开的菜单项会阻塞对模态对话框的访问。如果这种情况只在按精确的时间顺序打开对话框和菜单项时才会出现,那可能就需要一个用户花上两个月的工作时间才会发现这个问题。可是一旦应用程序发布到一个有数千用户的环境中,那问题可能会在几个小时之内出现,而仅仅根据现场报告将很难重现这种情况。事先确定问题,并且将其解决,这可以提高应用的整体健壮性。
除了应付随即敲击键盘这样的情况以外,健壮性还有更多的含义。观察一个非开发人员如何使用某个应用也是非常有益的。当一个程序的作者自己运行这个程序时,他会“看见”隐藏在程序背后的代码,并且潜意识地避免执行一些特定的操作组合,或者是在特定条件下的某些操作。最终用户是不会了解到这些的,而且也不会有开发者坐在你的旁边(除非你们在做结对编程)。换一个人以非常规的方式完成地运行你的应用的工作流程会帮助你在早期建立起程序的健壮性。
6.1.3 一致性
我们介绍过,Ajax的可用性模式是混合了作用应用和Web浏览器的使用习惯的,并且任然在不断地进化着。一些Ajax工具,例如Bindows、qooxdoo和Backbase,甚至提供刻意地设计成与桌面应用中的按钮、树和表格等外观相似的UI部件集。
随着Web的不断发展,Web管理员、可用性设计的大师和日常用户都在为如何提高Web应用的可用性而不断地寻求着更加理想的解决方案。在这种情况下,我们可以提供的最好的建议就是尽量使一切都保持一致。如果应用的一部分是以Web风格的单击来打开的一个弹出窗口,而另一部分却需要在相似的图标上进行双击,那么你的用户很快就会糊涂了。如果你必须有一个“谈话猪”来引导用户使用整个站点,那可千万别让它在半路上突然改变了语气、着装或者是发型。
从代码库的观点来看,一致性与可重用性是息息相关的。如果你习惯于经常将一段功能代码从一个地方复制粘贴到另外一个地方,例如,将一段找零请求按钮的呈现代码经多次复制后产生了4处拷贝,当需要修改按钮的呈现方式的时候,你只修改了3个地方,但是却漏掉了第4个地方,你的界面的一致性就会随着时间的增长而逐步恶化。如果只有一段按钮的呈现代码,并且每个人都使用它,那么应用的一致性就可以保持在较高的水平上。这个原则不仅仅适用于可视化的UI操作,也适用于界面中不大可视化的部分,例如网络超时或者对非法数据的响应等等。