ajax的七宗罪及反驳

AJAX的七宗罪

引子

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还是其他一些应用中能看到的都是无数的<script src="..."></script>这样的文件包含,这些除了让程序员头昏的更快点,一点好处都没有。更可怕的是在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 的七宗罪”

(AJA X的七宗罪:http://tech.163.com/05/1009/18/1VL1PAP300091589.html

我不带任何主观色彩来评一下这个所谓的 “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标准?<span οnclick="location.href="/detail/";">点击查看全部</a>,这就是破坏了web标准。好好的A标签放着不用,偏要用span。这种例子很多,flickr中的标题单击后可以更改,这虽然(也包括我)是大家一致叫好觉得方便的设计,但同时这也是歧义了 web元素本身的含义,物是人非这个词不知道用的合不合适?

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

(本文转载自“Java视线”,原文地址:http://forum.javaeye.com/viewtopic.php?t=13844,作者dlee)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值