位置:海鸟网 > IT > JavaScript >

警惕AJAX应用开发中的轻罪和死罪

  AJAX bandwagon是个好去处。它能为您提供更快捷高效,动态更强的应用。但是它也有自己的缺陷。 

  乍看之下,具备一些常识似乎就能够避免这些缺陷,在某种程度上来看,的确如此。但是从AJAX 应用的DHTML起源来看,AJAX应用中充满了结构性的差异。无论您在应用开发工作中掌握了多少常识,学习前人的教训都是有好处的。我们将这些错误称为我们的“七宗死罪”,但是这些错误并不能代表全部的错误。

  事实上,在您犯下任何一宗死罪之前,您都可能首先犯了一些较为轻微的错误。因此,我们首先从这里着手。以下是每个人都可能会犯的一些错误,这些错误是如此常见,只要用Google搜索一下,就能找到大不部分的错误。

  七宗轻罪

  1.滥用后退键-这是每个人都会犯的错误。后退键在很多种Web应用中已然成为用户的期望。很多AJAX开发新手在开发AJAX应用时,出于多种原因都会使用后退键。首先,JavaScript对于它来说不是最友好的语言;其次,AJAX 设计需要一种全新的思考分析。

  对于AJAX新手来说很难接受“后退”不是最好选择的思路。“后退”是更新页面时,或是在特定情况下进行“撤消”时才需要的功能。在您进行编码时就要认识到,否则您最后可能会重复做功。

  2.忘记告诉用户当前发生的状况-AJAX的工作原理中一部分就是它不使用通常的网页用户界面加载程序。因此,您需要设计一些可视的提示,使用户能够了解正在发生的状况。

  3.忘记链接-这也是标准的AJAX错误:漏做了外部用户能够剪切和粘贴的URL链接。我们都曾经复制过某个URL链接然后将其发送给别人。在我们使用AJAX时,只有采用纯手工输入的方式才能把链接提供给他人。为什么?因为在AJAX应用中,服务器不提供在JavaScript自动生成的这个页面。不要忽视您的用户可能感兴趣的这项在网络应用中最为常见的功能。请花点时间为用户提供URL地址,因为服务器并不提供。

  4.用内容控制替代页面控制-如果您在寻求动态的内容控制,那么AJAX应用对传统的客户端服务器交互方式的突破对您来说可算一份大礼。但是,这样同时也会招来祸端:在重写页面上某精确位置上的内容以调整用户的交互体验时的确能够进行很好的控制,但是这可能将使您的页面不再完整。

  在很多情况下,我们专注于处理页面的某个部分,会忘记服务器不会刷新页面。这样可能导致页面零乱,使用户体验降低:当他们查看页面时看的可能是过时的页面。请关注整个页面;确保任何出现动态内容的页面都得到更新。

  5.累死蜘蛛-AJAX的优势在于无需重装就可以提供给页面的大量文本;AJAX的缺陷也在于那些无需重装就可以提供给页面的大量文本。如果应用被设计为对搜索引擎友好,那么您应该能够想到会出现什么状况。无论页面中出现了什么情况,请务必在最上面植入大量稳定的文本,让蜘蛛们去玩吧。

  6.导致乱码文本-AJAX不能支持多种字符集。这并不是什么涉及生死的局限性,但是如果忘记这点可能会导致真正的问题发生。最基本的字符集是UTF-8。无论JavaScript发送的是什么字符集,请不要忘了正确编码,并根据内容设置服务器端的字符集。  

  7.没有为使用不支持JavaScript的浏览器的用户提供提示。有些浏览器不支持JavaScript,这些用户一时不能明白出了什么状况。请给他们一些提示。

  以上都是一些很容易发现的错误。真正的问题都是容易被人忽视的。  

  AJAX七宗死罪

  1.造成内存泄露-任何长期从事开发工作的人都知道什么是循环引用,并了解循环引用给内存管理带来的危害。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来创建内容。