引子
2005.2.18,Jesse James Garrett 的一篇A New Approach to Web Applications引出了AJAX這個(gè)web界的新名詞。加上新寵兒在降生下來就和足球名隊(duì)阿賈克斯、Google Suggest Google Maps這些大腕息息相關(guān),不想出名都難啊。但似乎人們給與AJAX的期望有點(diǎn)太高了,甚至有人提出了用AJAX取代Java Applet和Flash。不知Flickr是不是也聽到這種呼聲才把自己的Flash UI轉(zhuǎn)向了普通的Javascript。AJAX是個(gè)偉大的東西,它是在不創(chuàng)造新技術(shù)的前提下誕生的一個(gè)標(biāo)準(zhǔn),憑這一點(diǎn)就能招來大批的狂熱追隨者,AJAX看起來更像是楊過和小龍女練得玉女素心劍一樣,分開來沒有什么破壞力,但是二者合一就威力無比。
罪之一:對(duì)搜索引擎的支持不好
這其實(shí)更像一個(gè)大大的諷刺,AJAX的鼻祖是Google,但卻對(duì)Google自己支持最不好了,GMail主界面除過Top和Bottom外沒有一個(gè)鏈接就是最形象的諷刺了。雖然Mail本身是個(gè)私人的應(yīng)用系統(tǒng),但這個(gè)無鏈接的設(shè)計(jì)界面恰恰給AJAX開了個(gè)壞頭。Flash也有同樣有這個(gè)毛病。沒有鏈接的web就像森林中迷路的羔羊,這句看似廣告語,其實(shí)是web設(shè)計(jì)的根本原則。
罪之二:編寫復(fù)雜、容易出錯(cuò)
javascript本是是個(gè)輕量級(jí)的小東西,現(xiàn)在被強(qiáng)迫重用起來,負(fù)擔(dān)可想而知。javascript對(duì)OOP的支持很少,這就限制了javascript代碼的可重用可封裝等等,從Google Mpa還是其他一些應(yīng)用中能看到的都是無數(shù)的<script src="..."></script>這樣的文件包含,這些除了讓程序員頭昏的更快點(diǎn),一點(diǎn)好處都沒有。更可怕的是在javascript中竟然沒有一款順手的Debug軟件,很多寫js的老手到今天還是用最原始的alert("")來調(diào)試,splinetech JavaScript HTML Debugger 算是一個(gè)看起來還像個(gè)樣子的調(diào)試器吧,可惜不是免費(fèi)的,幾十大刀讓我這種窮人只能望而生嘆了。
罪之三:冗余代碼更多了
和上面說的差不多,層層包含js文件是AJAX的通病,再加上以往的很多服務(wù)端代碼現(xiàn)在放到了客戶端,所以每次打開一個(gè)頁面會(huì)包含很多的無用的js文件也一同下載下來。雖然寬帶越來越普及,但是減少代碼冗余還是每個(gè)web設(shè)計(jì)者的必修課。
罪之四:破壞了Web的原有標(biāo)準(zhǔn)
什么叫破壞web標(biāo)準(zhǔn)?<span onclick="location.href=‘detail/‘;">點(diǎn)擊查看全部</a>,這就是破壞了web標(biāo)準(zhǔn)。好好的A標(biāo)簽放著不用,偏要用span。這種例子很多,flickr中的標(biāo)題單擊后可以更改,這雖然(也包括我)是大家一致叫好覺得方便的設(shè)計(jì),但同時(shí)這也是歧義了web元素本身的含義,物是人非這個(gè)詞不知道用的合不合適?
罪之五:缺少一個(gè)沒有標(biāo)準(zhǔn)之爭、沒有back和history的瀏覽器
哈哈,這句話語有點(diǎn)諷刺意義?,F(xiàn)在的瀏覽器市場(chǎng),不管是IE還是FireFox還是Opera等等。瀏覽器和瀏覽器之間的差異一直都是web設(shè)計(jì)者心中永遠(yuǎn)的痛,支持的css不一樣,支持的客戶端腳本不一樣,有的竟然連客戶端腳本的用法都有不同。這讓程序員非常苦惱,最明顯的就是調(diào)用xmlhttprequest了,req=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");這段創(chuàng)建xmlhttp對(duì)象的代碼就是為了適應(yīng)IE和非IE兩天陣營的瀏覽器的經(jīng)典例子。說是沒有back和沒有history的瀏覽器,這也是一個(gè)諷刺,主要是指在AJAX下點(diǎn)擊鏈接是不Redirect頁面,所以不存在后退和前進(jìn)了,同樣,沒有后退和前進(jìn)也就無存找瀏覽歷史紀(jì)錄了。back和history存在的根本就是url的改變,在AJAX下人們發(fā)現(xiàn)不改url也同樣能達(dá)到內(nèi)容改變這個(gè)酷酷的特點(diǎn),何樂而不為呢?look http://www./和http://www./,我承認(rèn)這兩個(gè)站確實(shí)做得非常棒,但除了酷酷的感覺外,毫無用處。
罪之六:XML只是用來打幌子
xml從誕生那天起就被一致看好,大有非xml不娶之勢(shì),我想Jesse James Garrett也是為了趨于流行才把xml強(qiáng)行加入ajax的吧。xml有一個(gè)致命的缺點(diǎn),那就是加載的資源耗費(fèi),這好像是所有平臺(tái)下xml的通病。google map雖然是Jesse James Garrett推薦的AJAX的品牌代言人,但是gmap并沒有用xml,而是用了原生的javascript數(shù)組,我自己在用AJAX從服務(wù)端傳回?cái)?shù)據(jù)時(shí)也從來不用XML,因?yàn)樗屛腋爆嵶屜到y(tǒng)更慢。服務(wù)端首先要調(diào)用xml對(duì)要傳輸?shù)臄?shù)據(jù)進(jìn)行封裝,客戶端得到數(shù)據(jù)后再調(diào)用xml進(jìn)行解析,簡直是畫蛇添足。AJAX的一個(gè)重要特點(diǎn)是要身法輕盈,數(shù)據(jù)的傳輸盡量單一和簡陋,如果確實(shí)需要傳輸大量復(fù)雜的數(shù)據(jù),也應(yīng)該通過多次調(diào)用傳回。
罪之七:世界這么大卻找不到自己的家
AJAX適用于什么?能干什么?能帶來什么?在網(wǎng)站上用AJAX那是笑話,除非像Google Map和Flickr這樣的專業(yè)領(lǐng)域的網(wǎng)站外,普通網(wǎng)站根本沒必要用這個(gè)技術(shù);在龐大的企業(yè)應(yīng)用市場(chǎng)估計(jì)還能有AJAX的一點(diǎn)容身之地,不過在MS、SUN不會(huì)看著AJAX這個(gè)野孩子來在他們的地盤上撒潑的,如果大家都用AJAX,那java給誰賣?.net給誰賣?所以AJAX在企業(yè)應(yīng)用也不是長久之地。所以,AJAX現(xiàn)在找不到自己合適的位置是個(gè)很大的尷尬。疑病亂投醫(yī),最近把AJAX的矛頭指向Flash和Applet就是一個(gè)例子。
當(dāng)然,我也不是要把AJAX扁的一無是處,我本人就非常喜歡這門技術(shù),它能讓web設(shè)計(jì)者的眼球更加寬廣,讓一些大膽的設(shè)計(jì)成為現(xiàn)實(shí),但是我也會(huì)很冷靜的小心翼翼的利用這個(gè)利器,利器雖好,一不留神刺傷的是自己。
PS:這篇文章是昨晚寫的,今早卻神奇般的從網(wǎng)上看見了一篇文章Ajax: 99% Bad,文章是針對(duì)2000年那片著名的Flash: 99% Bad 寫的,其中的觀點(diǎn)和我所說的七宗罪中的幾宗相似。