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還是其他一些應用中能看到的都是無數的 這樣的文件包含,這些除了讓程序員頭昏的更快點,一點好處都沒有。更可怕的是在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 的七宗罪”
(本文轉載自“Java視線”,原文地址:http://forum.javaeye.com/viewtopic.php?t=13844,作者dlee)
(AJA X的七宗罪:http://news.csdn.net/news/newstopic/22/22216.shtml)
我不帶任何主觀色彩來評一下這個所謂的 “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 來實現了?況且在最新的 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:我已經不需要再說什么了。
