AJAX的七宗罪

罪之一:对搜索引擎的支持不好

这其实更像一个大大的讽刺,AJAX的鼻祖是Google,但却对Google自己支持最不好了,GMail主界面除过Top和Bottom外没有一个链接就是最形象的讽刺了。虽然Mail本身是个私人的应用系统,但这个无链接的设计界面恰恰给AJAX开了个坏头。Flash也有同样有这个毛病。没有链接的web就像森林中迷路的羔羊,这句看似广告语,其实是web设计的根本原则。

罪之二:编写复杂、容易出错

javascript本是是个轻量级的小东西,现在被强迫重用起来,负担可想而知。javascript对OOP的支持很少,这就限制了javascript代码的可重用可封装等等,从Google Mpa还是其他一些应用中能看到的都是无数的<script src="..."></script>这样的文件包含,这些除了让程序员头昏的更快点,一点好处都没有。更可怕的是在javascript中竟然没有一款顺手的Debug软件,很多写js的老手到今天还是用最原始的alert("")来调试,splinetech JavaScript HTML Debugger 算是一个看起来还像个样子的调试器吧,可惜不是免费的,几十大刀让我这种穷人只能望而生叹了。

罪之三:冗余代码更多了

和上面说的差不多,层层包含js文件是AJAX的通病,再加上以往的很多服务端代码现在放到了客户端,所以每次打开一个页面会包含很多的无用的js文件也一同下载下来。虽然宽带越来越普及,但是减少代码冗余还是每个web设计者的必修课。

罪之四:破坏了Web的原有标准

什么叫破坏web标准?<span onclick="location.href='detail/';">点击查看全部</a>,这就是破坏了web标准。好好的A标签放着不用,偏要用span。这种例子很多,flickr中的标题单击后可以更改,这虽然(也包括我)是大家一致叫好觉得方便的设计,但同时这也是歧义了web元素本身的含义,物是人非这个词不知道用的合不合适?

罪之五:缺少一个没有标准之争、没有back和history的浏览器

哈哈,这句话语有点讽刺意义。现在的浏览器市场,不管是IE还是FireFox还是Opera等等。浏览器和浏览器之间的差异一直都是web设计者心中永远的痛,支持的css不一样,支持的客户端脚本不一样,有的竟然连客户端脚本的用法都有不同。这让程序员非常苦恼,最明显的就是调用xmlhttprequest了,req=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");这段创建xmlhttp对象的代码就是为了适应IE和非IE两天阵营的浏览器的经典例子。说是没有back和没有history的浏览器,这也是一个讽刺,主要是指在AJAX下点击链接是不Redirect页面,所以不存在后退和前进了,同样,没有后退和前进也就无存找浏览历史纪录了。back和history存在的根本就是url的改变,在AJAX下人们发现不改url也同样能达到内容改变这个酷酷的特点,何乐而不为呢?look http://www.dux2005.org/http://www.zagodesign.com/,我承认这两个站确实做得非常棒,但除了酷酷的感觉外,毫无用处。

罪之六:XML只是用来打幌子

xml从诞生那天起就被一致看好,大有非xml不娶之势,我想Jesse James Garrett也是为了趋于流行才把xml强行加入ajax的吧。xml有一个致命的缺点,那就是加载的资源耗费,这好像是所有平台下xml的通病。google map虽然是Jesse James Garrett推荐的AJAX的品牌代言人,但是gmap并没有用xml,而是用了原生的javascript数组,我自己在用AJAX从服务端传回数据时也从来不用XML,因为它让我更繁琐让系统更慢。服务端首先要调用xml对要传输的数据进行封装,客户端得到数据后再调用xml进行解析,简直是画蛇添足。AJAX的一个重要特点是要身法轻盈,数据的传输尽量单一和简陋,如果确实需要传输大量复杂的数据,也应该通过多次调用传回。

罪之七:世界这么大却找不到自己的家 

AJAX适用于什么?能干什么?能带来什么?在网站上用AJAX那是笑话,除非像Google Map和Flickr这样的专业领域的网站外,普通网站根本没必要用这个技术;在庞大的企业应用市场估计还能有AJAX的一点容身之地,不过在MS、SUN不会看着AJAX这个野孩子来在他们的地盘上撒泼的,如果大家都用AJAX,那java给谁卖?.net给谁卖?所以AJAX在企业应用也不是长久之地。所以,AJAX现在找不到自己合适的位置是个很大的尴尬。疑病乱投医,最近把AJAX的矛头指向Flash和Applet就是一个例子。

当然,我也不是要把AJAX扁的一无是处,我本人就非常喜欢这门技术,它能让web设计者的眼球更加宽广,让一些大胆的设计成为现实,但是我也会很冷静的小心翼翼的利用这个利器,利器虽好,一不留神刺伤的是自己。

阅读更多
换一批

AJAX之罪:用事实说话!AJAX应用程序开发七宗罪

03-20

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

没有更多推荐了,返回首页