龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

AJAX的七宗罪 and 驳AJAX的七宗罪

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
AJAX的七宗罪 (原文地址: http://duduwolf.winzheng.com/post/115.asp 作者:嘟嘟) 引子 2005.2.18,Jesse James Garrett的一篇A New Approach to Web Applications引出了AJAX这个web界的新名词。加上新宠儿在降生

AJAX的七宗罪
(原文地址:http://duduwolf.winzheng.com/post/115.asp  作者:嘟嘟)

引子

2005.2.18,Jesse James Garrett的一篇A New Approach to Web Applications引出了AJAX这个web界的新名词。加上新宠儿在降生下来就和足球名队阿贾克斯、Google Suggest Google Maps这些大腕息息相关,不想出名都难啊。但似乎人们给与AJAX的期望有点太高了,甚至有人提出了用AJAX取代Java Applet和Flash。不知Flickr是不是也听到这种呼声才把自己的Flash UI转向了普通的Javascript。AJAX是个伟大的东西,它是在不创造新技术的前提下诞生的一个标准,凭这一点就能招来大批的狂热追随者,AJAX看起来更像是杨过和小龙女练得玉女素心剑一样,分开来没有什么破坏力,但是二者合一就威力无比。

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

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

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

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

罪之三:冗余代码更多了

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

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

什么叫破坏web标准?点击查看全部,这就是破坏了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设计者的眼球更加宽广,让一些大胆的设计成为现实,但是我也会很冷静的小心翼翼的利用这个利器,利器虽好,一不留神刺伤的是自己。

PS:这篇文章是昨晚写的,今早却神奇般的从网上看见了一篇文章Ajax:99% Bad,文章是针对2000年那片著名的Flash:99% Bad写的,其中的观点和我所说的七宗罪中的几宗相似。

驳“AJAX的七宗罪”
(原文地址:http://forum.javaeye.com/viewtopic.php?t=13844,作者:dlee)

我不带任何主观色彩来评一下这个所谓的“AJAX的七宗罪”。

1、连带着Flash和Ajax一块骂了。

引用:没有链接的web就像森林中迷路的羔羊,这句看似广告语,其实是web设计的根本原则。

这句“原则”至少我并不知道,因此看起来不过就是一句广告语而已。我的原则是Web应用首先需要对于最终用户友好,然后才需要考虑对于搜索引擎友好。你使用HTML FORM提交的数据也是没有链接的,这些数据可以被搜索引擎搜索到吗?换句话说,可以添加在链接URL中的只有通过GET方法发送的请求。搜索引擎难道连使用POST方法提交的FORM数据都能搜索到吗?如果搜索引擎能搜索到这些数据,搜索引擎搜索到同样通过HTTP协议以明文形式发送的XML数据难道是很困难的事情吗?

必须要考虑对于搜索引擎友好的应用也是有限的。你以为Google真的没有办法解决这些问题吗?太小看Google了吧?

2、这个作者显然很少做JavaScirpt开发,以至于说出这样没有调查的话来:

引用:更可怕的是在javascript中竟然没有一款顺手的Debug软件,很多写js的老手到今天还是用最原始的alert("")来调试,splinetech JavaScript HTML Debugger算是一个看起来还像个样子的调试器吧,可惜不是免费的,几十大刀让我这种穷人只能望而生叹了。

M$ Visual InterDev、Office 2003中带的Script Debugger都是非常好用的调试工具。如果不愿意花钱买这些工具,还可以使用Mozilla开发的Venkman,调试功能已经非常完善了。说JS没有很好的IDE是实情,说JS没有很好的调试工具简直是天大的笑话。

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

完全是没有调查的胡说,如果通过不同的文件对于JS代码进行了认真的组织,将JS函数分到很多小文件中,一个页面仅仅只需要加载它自己使用到的JS文件,何来冗余代码之说?

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

这仅仅是一个具体应用中的用法,居然也归到了Ajax头上,真是欲加之罪,何患无词。这里如果简单地将span换成a难道不是很容易的事情吗?如果使用a就不能使用onclick了吗?按照作者的想法,似乎所有的a都应该只能是简单链接,不能加上onclick,加上onclick就变成了Ajax,就触犯了天条,破坏了Web标准。况且给span加上一个onclick居然就上纲上线到破坏Web标准的层次,我研究Web标准这么多年,也没有看出究竟破坏了哪一款哪一条的Web标准。Web标准中什么地方规定只允许使用a,不允许使用span来实现了?况且在最新的XHTML1.2标准中,a已经变成了一个不推荐使用的标记。什么是Web标准,什么是破坏Web标准?回去翻翻书吧。

5、引用:浏览器和浏览器之间的差异一直都是web设计者心中永远的痛,支持的css不一样,支持的客户端脚本不一样,有的竟然连客户端脚本的用法都有不同。这让程序员非常苦恼,最明显的就是调用xmlhttprequest了,req=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");这段创建xmlhttp对象的代码就是为了适应IE和非IE两天阵营的浏览器的经典例子。说是没有back和没有history的浏览器,这也是一个讽刺,主要是指在AJAX下点击链接是不Redirect页面,所以不存在后退和前进了,同样,没有后退和前进也就无存找浏览历史纪录了。back和history存在的根本就是url的改变,在AJAX下人们发现不改url也同样能达到内容改变这个酷酷的特点,何乐而不为呢?

我提到过多次《网站重构》,这本书要解决什么问题?femto开始读了吗?曾经产生过读这本书的欲望吗?

创建XMLHTTP对象的不同语法只是一个非常小的问题,这是在XMLHTTP没有被完全标准化之前的暂时问题。现在基于Web标准做开发,必须要写针对不同浏览器的代码片断的场合已经非常少了,封装这些差异的JS库网上也已经有很多了。

无法利用back/history的问题在Google Maps中是使用IFrame来解决的,这个问题我在BEA User Group的演讲中已经说过了。

6、引用:xml有一个致命的缺点,那就是加载的资源耗费,这好像是所有平台下xml的通病。google map虽然是Jesse James Garrett推荐的AJAX的品牌代言人,但是gmap并没有用xml,而是用了原生的javascript数组,我自己在用AJAX从服务端传回数据时也从来不用XML,因为它让我更繁琐让系统更慢。服务端首先要调用xml对要传输的数据进行封装,客户端得到数据后再调用xml进行解析,简直是画蛇添足。

致命吗?我做了这么多浏览器端的XML开发,为什么至今没有感受到?Google Maps服务器端传给客户端的数据就是不折不扣的XML,其它的开发人员还可以对这个XML进行定制加入自己的数据。Google Maps还在客户端几个功能上使用了XSLT。说Google Maps没有使用XML,要不要我把我亲自整理过的Google Maps客户端的代码发给你你才能闭嘴?

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

又是一番奇谈怪论。说大公司不会使用Ajax完全是主观臆测。事实上,大量使用客户端JS的大公司包括以下这些:

Macromedia:在Dreamweaver产品中包括了大量的JS代码。

Oracle:很多产品都使用了JS,目前对于Ajax很感兴趣。这个消息是我在深圳Oracle做开发的一个朋友亲口告诉我的。

SAP:早在很多年以前,SAP就在其产品中大量使用了JS+XMLHTTP的技术,仅仅是SAP没有炒做这个概念而已。说Ajax不适合企业应用,SAP是靠做什么吃饭的?

Google:我已经不需要再说什么了。


精彩图集

赞助商链接