(本文轉載自“Java視線(xiàn)”,原文地址:http://forum.javaeye.com/viewtopic.php?t=13844,作者dlee)
(AJAX的七宗罪:http://news.csdn.net/news/newstopic/22/22216.shtml)
我不帶任何主觀(guān)色彩來(lái)評一下這個(gè)所謂的 “AJAX 的七宗罪”。
1、連帶著(zhù) Flash 和 Ajax 一塊罵了。
| 引用: |
| 沒(méi)有鏈接的web就像森林中迷路的羔羊,這句看似廣告語(yǔ),其實(shí)是web設計的根本原則。 |
這句“原則”至少我并不知道,因此看起來(lái)不過(guò)就是一句廣告語(yǔ)而已。我的原則是 Web 應用首先需要對于最終用戶(hù)友好,然后才需要考慮對于搜索引擎友好。你使用 HTML FORM 提交的數據也是沒(méi)有鏈接的,這些數據可以被搜索引擎搜索到嗎?換句話(huà)說(shuō),可以添加在鏈接 URL 中的只有通過(guò) GET 方法發(fā)送的請求。搜索引擎難道連使用 POST 方法提交的 FORM 數據都能搜索到嗎?如果搜索引擎能搜索到這些數據,搜索引擎搜索到同樣通過(guò) HTTP 協(xié)議以明文形式發(fā)送的 XML 數據難道是很困難的事情嗎?
必須要考慮對于搜索引擎友好的應用也是有限的。你以為 Google 真的沒(méi)有辦法解決這些問(wèn)題嗎?太小看 Google 了吧?
2、這個(gè)作者顯然很少做 JavaScirpt 開(kāi)發(fā),以至于說(shuō)出這樣沒(méi)有調查的話(huà)來(lái):
| 引用: |
| 更可怕的是在javascript中竟然沒(méi)有一款順手的Debug軟件,很多寫(xiě)js的老手到今天還是用最原始的alert("")來(lái)調試,splinetech JavaScript HTML Debugger 算是一個(gè)看起來(lái)還像個(gè)樣子的調試器吧,可惜不是免費的,幾十大刀讓我這種窮人只能望而生嘆了。 |
M$ Visual InterDev、Office 2003 中帶的 Script Debugger 都是非常好用的調試工具。如果不愿意花錢(qián)買(mǎi)這些工具,還可以使用 Mozilla 開(kāi)發(fā)的 Venkman,調試功能已經(jīng)非常完善了。說(shuō) JS 沒(méi)有很好的 IDE 是實(shí)情,說(shuō) JS 沒(méi)有很好的調試工具簡(jiǎn)直是天大的笑話(huà)。
3、
| 引用: |
| 和上面說(shuō)的差不多,層層包含js文件是AJAX的通病,再加上以往的很多服務(wù)端代碼現在放到了客戶(hù)端,所以每次打開(kāi)一個(gè)頁(yè)面會(huì )包含很多的無(wú)用的js文件也一同下載下來(lái)。雖然寬帶越來(lái)越普及,但是減少代碼冗余還是每個(gè)web設計者的必修課。 |
完全是沒(méi)有調查的胡說(shuō),如果通過(guò)不同的文件對于 JS 代碼進(jìn)行了認真的組織,將 JS 函數分到很多小文件中,一個(gè)頁(yè)面僅僅只需要加載它自己使用到的 JS 文件,何來(lái)冗余代碼之說(shuō)?
4、
| 引用: |
| 什么叫破壞web標準?<span onclick="location.href=‘detail/‘;">點(diǎn)擊查看全部</a>,這就是破壞了web標準。好好的A標簽放著(zhù)不用,偏要用span。這種例子很多,flickr中的標題單擊后可以更改,這雖然(也包括我)是大家一致叫好覺(jué)得方便的設計,但同時(shí)這也是歧義了 web元素本身的含義,物是人非這個(gè)詞不知道用的合不合適? |
這僅僅是一個(gè)具體應用中的用法,居然也歸到了 Ajax 頭上,真是欲加之罪,何患無(wú)詞。這里如果簡(jiǎn)單地將 span 換成 a 難道不是很容易的事情嗎?如果使用 a 就不能使用 onclick 了嗎?按照作者的想法,似乎所有的 a 都應該只能是簡(jiǎn)單鏈接,不能加上 onclick,加上 onclick 就變成了 Ajax,就觸犯了天條,破壞了 Web 標準。況且給 span 加上一個(gè) onclick 居然就上綱上線(xiàn)到破壞 Web 標準的層次,我研究 Web 標準這么多年,也沒(méi)有看出究竟破壞了哪一款哪一條的 Web 標準。Web 標準中什么地方規定只允許使用 a,不允許使用 span 來(lái)實(shí)現了?況且在最新的 XHTML 1.2 標準中,a 已經(jīng)變成了一個(gè)不推薦使用的標記。什么是 Web 標準,什么是破壞 Web 標準?回去翻翻書(shū)吧。
5、
| 引用: |
| 瀏覽器和瀏覽器之間的差異一直都是web設計者心中永遠的痛,支持的css不一樣,支持的客戶(hù)端腳本不一樣,有的竟然連客戶(hù)端腳本的用法都有不同。這讓程序員非??鄲?,最明顯的就是調用xmlhttprequest了,req=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");這段創(chuàng )建xmlhttp對象的代碼就是為了適應IE和非IE兩天陣營(yíng)的瀏覽器的經(jīng)典例子。說(shuō)是沒(méi)有back和沒(méi)有history的瀏覽器,這也是一個(gè)諷刺,主要是指在A(yíng)JAX下點(diǎn)擊鏈接是不Redirect頁(yè)面,所以不存在后退和前進(jìn)了,同樣,沒(méi)有后退和前進(jìn)也就無(wú)存找瀏覽歷史紀錄了。back和history存在的根本就是url的改變,在A(yíng)JAX下人們發(fā)現不改url也同樣能達到內容改變這個(gè)酷酷的特點(diǎn),何樂(lè )而不為呢? |
我提到過(guò)多次《網(wǎng)站重構》,這本書(shū)要解決什么問(wèn)題?femto 開(kāi)始讀了嗎?曾經(jīng)產(chǎn)生過(guò)讀這本書(shū)的欲望嗎?
創(chuàng )建 XMLHTTP 對象的不同語(yǔ)法只是一個(gè)非常小的問(wèn)題,這是在 XMLHTTP 沒(méi)有被完全標準化之前的暫時(shí)問(wèn)題?,F在基于 Web 標準做開(kāi)發(fā),必須要寫(xiě)針對不同瀏覽器的代碼片斷的場(chǎng)合已經(jīng)非常少了,封裝這些差異的 JS 庫網(wǎng)上也已經(jīng)有很多了。
無(wú)法利用 back/history 的問(wèn)題在 Google Maps 中是使用 IFrame 來(lái)解決的,這個(gè)問(wèn)題我在 BEA User Group 的演講中已經(jīng)說(shuō)過(guò)了。
6
| 引用: |
| xml有一個(gè)致命的缺點(diǎn),那就是加載的資源耗費,這好像是所有平臺下xml的通病。google map雖然是Jesse James Garrett推薦的AJAX的品牌代言人,但是gmap并沒(méi)有用xml,而是用了原生的javascript數組,我自己在用AJAX從服務(wù)端傳回數據時(shí)也從來(lái)不用 XML,因為它讓我更繁瑣讓系統更慢。服務(wù)端首先要調用xml對要傳輸的數據進(jìn)行封裝,客戶(hù)端得到數據后再調用xml進(jìn)行解析,簡(jiǎn)直是畫(huà)蛇添足。 |
致命嗎?我做了這么多瀏覽器端的 XML 開(kāi)發(fā),為什么至今沒(méi)有感受到?Google Maps 服務(wù)器端傳給客戶(hù)端的數據就是不折不扣的 XML,其它的開(kāi)發(fā)人員還可以對這個(gè) XML 進(jìn)行定制加入自己的數據。Google Maps 還在客戶(hù)端幾個(gè)功能上使用了 XSLT。說(shuō) Google Maps 沒(méi)有使用 XML,要不要我把我親自整理過(guò)的 Google Maps 客戶(hù)端的代碼發(fā)給你你才能閉嘴?
7、
| 引用: |
| AJAX適用于什么?能干什么?能帶來(lái)什么?在網(wǎng)站上用AJAX那是笑話(huà),除非像Google Map和Flickr這樣的專(zhuān)業(yè)領(lǐng)域的網(wǎng)站外,普通網(wǎng)站根本沒(méi)必要用這個(gè)技術(shù);在龐大的企業(yè)應用市場(chǎng)估計還能有AJAX的一點(diǎn)容身之地,不過(guò)在MS、 SUN不會(huì )看著(zhù)AJAX這個(gè)野孩子來(lái)在他們的地盤(pán)上撒潑的,如果大家都用AJAX,那java給誰(shuí)賣(mài)?.net給誰(shuí)賣(mài)?所以AJAX在企業(yè)應用也不是長(cháng)久之地。所以,AJAX現在找不到自己合適的位置是個(gè)很大的尷尬。疑病亂投醫,最近把AJAX的矛頭指向Flash和Applet就是一個(gè)例子。 |
又是一番奇談怪論。說(shuō)大公司不會(huì )使用 Ajax 完全是主觀(guān)臆測。事實(shí)上,大量使用客戶(hù)端 JS 的大公司包括以下這些:
Macromedia:在 Dreamweaver 產(chǎn)品中包括了大量的 JS 代碼。
Oracle:很多產(chǎn)品都使用了 JS,目前對于 Ajax 很感興趣。這個(gè)消息是我在深圳 Oracle 做開(kāi)發(fā)的一個(gè)朋友親口告訴我的。
SAP:早在很多年以前,SAP 就在其產(chǎn)品中大量使用了 JS+XMLHTTP 的技術(shù),僅僅是 SAP 沒(méi)有炒做這個(gè)概念而已。說(shuō) Ajax 不適合企業(yè)應用,SAP 是靠做什么吃飯的?
Google:我已經(jīng)不需要再說(shuō)什么了。