在开发AJAX程序的过程中,很多人都会犯一些常见的错误,有些错误可能会危及到AJAX程序的功能和性能,使AJAX程序的优势损失殆尽。这里笔者将给大家介绍开发AJAX程序过程中需要注意的七宗罪。
AJAX是一个好东西,它可以让开发人员更快更有效的建立更具动态效果的应用程序。但是它也有自身的不足。
乍看之下,具备一些常识似乎就能够避免这些缺陷,在某种程度上来看,的确如此。但是与对手DHTML相比,AJAX程序的架构完全不同。无论您在应用开发工作中掌握了多少常识,都应该学习前人的经验教训。在本文中,我们将这些错误称为“七宗死罪”,但是这些错误并不能代表全部的错误。
在了解有关AJAX开发过程中的七大致命错误之前,我们先来看看七个不是那么严重的错误。这些错误每个人都会犯。通过Google搜索一下,你会发现这些错误是如此常见。
七宗轻罪
1.滥用后退键—这个错误很多人都会犯,后退键已经成为了很多Web体验程序中的必备内容。很多AJAX开发新手出于各种原因,都会在AJAX程序中加入后退键,但是却发现后退键影响了程序功能。这主要是由于Javascript并不是一个很友善的编程语言,其次,开发人员重新学习AJAX的开发思路。
对于AJAX新手来说,要接收“后退键并不是一个好方案”的思想不是很容易。当我们在页面的刷新点,或者需要用到“Undo”功能时,可以考虑“后退键”。但是在编码时一定要三思而后行,否则很容易发生重复刷新的情况。
2.不告知用户操作的结果-AJAX的工作原理中一部分就是它不使用通常的网页用户界面加载程序。因此,您需要设计一些可视的提示,使用户能够了解正在发生的状况。
3.忽视连接-这也是标准的AJAX错误:漏做了外部用户能够剪切和粘贴的URL链接。我们都曾经复制过某个url链接然后将其发送给别人。在我们使用AJAX时,只有采用纯手工输入的方式才能把链接提供给他人。为什么?因为在AJAX应用中,服务器不提供在Javascript自动生成的这个页面。不要忽视您的用户可能感兴趣的这项在网络应用中最为常见的功能。请花点时间为用户提供URL地址,因为服务器并不提供。
4.用内容控制代替页面控制--如果您在寻求动态的内容控制,那么AJAX应用对传统的客户端服务器交互方式的突破对您来说可算一份大礼。但是,这样同时也会招来祸端:在重写页面上某精确位置上的内容以调整用户的交互体验时的确能够进行很好的控制,但是这可能将使您的页面不再完整。
在很多情况下,我们专注于处理页面的某个部分,会忘记服务器不会刷新页面。这样可能导致页面零乱,使用户体验降低:当他们查看页面时看的可能是过时的页面。请关注整个页面;确保任何出现动态内容的页面都得到更新。
5.累死蜘蛛--AJAX的优势在于无需重装就可以提供给页面的大量文本;AJAX的缺陷也在于那些无需重装就可以提供给页面的大量文本。如果应用被设计为对搜索引擎友好,那么您应该能够想到会出现什么状况。无论页面中出现了什么情况,请务必在最上面植入大量稳定的文本,让蜘蛛们去玩吧。
6.乱码-AJAX不能支持多种字符集。这并不是什么涉及生死的局限性,但是如果忘记这点可能会导致真正的问题发生。最基本的字符集是UTF-8。无论Javascript发送的是什么字符集,请不要忘了正确编码,并根据内容设置服务器端的字符集。
7.没有给不支持Javascript的用户提供提示-有些浏览器不支持Javascript,这些用户一时不能明白出了什么状况。请给他们一些提示。
以上都是一些很容易发现的错误。真正的问题都是容易被人忽视的。
七宗死罪
1.任由内存溢出--任何长期从事开发工作的人都知道什么是循环引用,并了解循环引用给内存管理带来的危害。AJAX所使用的Javascript是一种内存管理语言。也就是说Javascript具有内置的信息包收集功能,因此能够抽取不再有引用路径使用的变量并重新分配这些变量所使用的内存。
任何长期从事开发工作的人都知道什么是循环引用,并了解循环引用给内存管理带来的危害。AJAX所使用的Javascript是一种内存管理语言。也就是说Javascript具有内置的信息包收集功能,因此能够抽取不再有引用路径使用的变量并重新分配这些变量所使用的内存。
现在,问题出来了:在文件对象模型中,任何文件树中的DOM节点都可能被树中存在的其他元素引用,而无论其是否被其他对象所引用!因此,任何在信息包收集器中经过标注的被DOM节点向后引用的对象在这一方向上都必须为零,否则它的内存就会一直处于已分配状态。
2.不懂什么叫 “异步” --异步这个词很容易让不熟悉它的用户感到紧张。但是如果您为这些用户所设计的网页应用属于桌面应用,那么他们肯定不会感到不安。这是一个致关重要的设计点。大部分网页应用功能与桌面副本非常类似。但是在网页应用中,用户期望这种虚幻的特征导致他们截然不同。
用户在与网页浏览器打交道时会带有非常不同的偏见和期望,而对于桌面应用中他们并没有这样的行为。因此,尽管页面与服务器之间频繁的响应会非常好,非常高效,页面能够同时对自身进行修订,但是这将会使用户头晕眼花。因此,您需要遵守两条守则,要考虑到进入用户视觉范围内的每个变化:如果对于用户来说不是很迫切的更新,那么要使升级更为温和,不会转移;如果更新对于用户与应用的交互非常重要,那么更新要清楚而明显。
3.让服务器成瞎子--用户端与服务器交流的减少是一大问题,而以前并非如此。在以前,服务器端的应用了解全部情况并且能够看到全部状况:每个例外,每次重新加载,每个事件多能被看到并记录下来,当然服务器也道到底客户端是什么状况,因为服务器会记录下屏幕上显示的一起。
在AJAX应用中可不是这样。当有事件发生时,这些事件是与服务器相互独立的,也就是说,当客户端出现问题时,服务器端并不会马上知道。在某个位置发现和记录客户端发生的事件以及例外,使服务器能够追踪需要干涉的问题。
4.用GET偷懒--GET的作用是找回数据;POST的作用是对GET进行设置。不要在不适当的时候使用GET,即使你认为这样做没有危害也不要尝试。GET的动作会改变状态,会改变状态的链接会使用户感到困惑;大部分都认为链接的作用是导航,而不是功能。
5.不监测数据类型--Javascript并非.NET框架中的一部分。尽管这有点让人伤心,但是它的确为我们展示了一个我们可能会碰到的问题:确认Javascript能够理解其运行平台上的数据类型,反之,对于.NET或其它也是如此。可能会有多种转换,您需要一一进行。例如,Ajax.NET Pro资料库提供能够转换.NET和Javascript对象符号的转换器。
6.有些程序无法关闭 --无需刷新页面的内容动态生成如果没有关闭时间将会非常糟糕。How many Web pages hav你见过多少比美国国会议事录还长的网页?如果网页无限延长无疑会是用户的噩梦,只要想想用户会怎么看待永不停止的应用就知道了。让您的网络应用具有动态,但是一定要在可行的限度之内。
7.让Javascript和DOM相互独立--请记住AJAX是建立在“模型-视觉-控制器”(Model-View-Controller)结构之上,请认真对待这点。Javascript属于模型层,DOM属于视觉层,而控制器是衔接他们的婚姻顾问。请确保您的网络文件独立于Javascript之外(这样对于不支持Javascript的用户比较有用) – 除非内容自身只在用户使用Javascript才有意义。在这种情况下,用Javascript来创建内容