谨慎!使用AJAX技术的七个易忽视的错误

最近大家都抢着进入AJAX的行列。因为这个技术让你可以制造更快、更有效率、同时更为动态的程序。然而它本身也有一些问题。

  起初,这些问题多少可以透过简单的常识来避免。但AJAX程序与它的前身DHTML之间,还是充满许多结构上的不同。

  不管你对布署应用程序有多少知识,还是需要不断从发生过的错误中学习。我们把这些错误称为七个原罪,然而它不是这篇文章的全部内容。

  因为在你犯下任何一项严重错误之前,很可能就会先犯几个较轻的错误。

  所以我们从这些每个人都会犯的较轻错误开始讲起。这些错误十分常见,你只要随便上Google搜寻就可以找到大部分的错误。

  七项轻罪

  上一页按钮的误用-这是每个人都可能犯的错。上一页按钮已经变在用户在各类网页应用上都期待要有的东西。许多AJAX的新手会从AJAX设计程序上直接拖拉一个上一页按钮到程序里,结果是不能用。这有几个原因。首先,JavaScript并不是十分适合这样作的程序语言;其次,AJAX的设计思维比较新。

  AJAX开发新手不见得都了解到,使用「上页」按钮不见得最好。「上一页」是你在更新页面,或要在事件上进行「复原」动作时需要的功能。在你写之前请先彻底思考过,否则恐怕就要重写一次。

  不告诉使用者发生什么事-AJAX的好处之一是它在加载时不使用传统的网页用户界面。所以你必须额外设计一些视觉指示,让用户知道发生了什么事。

  忽略连结-这是另个AJAX可能发生的标准错误:忽略可以被拷贝贴在程序之外的网址。你自己应该也常复制网页上的网址然后寄给别人吧?当你使用AJAX技术时,让使用者可以剪贴网址的唯一办法就是手动提供这个功能。为什么呢?因为在一个AJAX程序里,服务器不提供网页: 网页由JavaScript动态产生!所以请不要忽略使用者的潜在需要,因为对一般网页来说这是最常见的功能。请自己花力气提供网址,因为服务器不会作这件事。

  使用内容控制来取代页面控制-如果你希望提供动态的内容控制,那AJAX打破传统的客户-伺服端架构是一个绝佳的功能。但它同时也会是个诅咒:重写页面的特定区域,来调整用户的互动模式,绝对有所帮助,但这也让你见树不见林。

  我们往往会关注于网页特定的区块,而忘记整个网页不会随之被服务器更新。在屏幕上陈旧的信息可能会让网页四分五裂,或让使用者困惑。请把你的注意放在整个页面上;并确定任何动态内容的改变,能让使用者看到的部分都有被更新。

  把spider拒于门外-AJAX的好处是,你可以在不需要重新读取的情况下,把一大堆文字贴到页面上。而这同时也是它的坏处。如果这个应用希望兼容于搜索引擎--呃,结果会怎样你可以自己想象。不管这个网页怎么变化更动,请放几个固定的文字在网页上方,让搜索引擎的spider可以处理。

  产生乱码-AJAX支持的字符码并不多。这虽然不是极关重要,但忘记这件事的确会造成问题。程序基本的字符组是UTF-8。不管JavaScript传送什么,请不要忘记将其正确编码,同时记得在服务器端设定内容的编码。

  让不支持JavaScript的使用者无所适从-市面上有些浏览器不支持JavaScript,但使用这些浏览器的人不会知道这代表什么意思。请记得要提供信息给这些用户。

  老实说大多时候这些是常识问题。但问题的发生往往是在情况没那么显而易见的时候。

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来创建内容。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值