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




