http://swik.net/Ajax/Ajax+Mistakes
在某網(wǎng)站瞎逛時,發(fā)現(xiàn)這個鏈接,進去逛了逛,覺得很有意思,大家也可以去看看,姑且不論你是否同意里面的觀點,看看別人看待ajax的角度,這對于理解一個事物很有幫助。
下面是我對一部分缺陷的看法:
為Ajax而Ajax(Using Ajax for the sake of Ajax.) 很同意這點,當一個技術(shù)本身的生存意義由于它自身的亮點而被抹殺,不知道是這個技術(shù)的幸運還是不幸。
干掉了back按鈕(Breaking the back button) back按鈕是一個標準的web站點UI的重要功能。然后,后退按鈕沒法和js很好的合作…… gmail似乎作的很好?不過沒去仔細看過gmail如何實現(xiàn)后退和js相容的,被這個mistake一提醒,也許這也是ue的一個切口哦。
點擊的時候沒有提供一個可視化的提示(Not giving immediate visual cues for clicking widgets) ……也許是我沒看懂,覺得寫這段的人自相矛盾。。他說沒提供可視化提示,不過是拿gmail右上角的紅色提示作為例子。
阻擋了離線用戶于門外(Leaving offline people behind) 看標題就清楚了,不過我持保留意見,web application和離線瀏覽本身似乎就存在著矛盾,要整合,可能要動很多腦子
別讓我等(Don’t make me wait) 不過,ajax本身就存在著如果客戶端的帶寬不夠,它的展示就會一塌糊涂的問題,這是它的先天缺陷,也是它崛起的先天因素--由于網(wǎng)速和帶寬的不斷增大,使得服務(wù)端與客戶端的頻繁通信成為可能。
顯式的傳遞敏感信息(Sending sensitive information in the clear) 使用js傳遞數(shù)據(jù),本身似乎就存在著這個風險,在我找到反對意見之前,我傾向認同這點--h(huán)ttps協(xié)議除外。
假設(shè)ajax發(fā)展是一個單平臺的發(fā)展。(Assuming AJAX development is single platform development) 作者文中的觀點是ajax由于必須兼容多個瀏覽器,而沒法做到只需要編碼到標準的js就行,還要考慮到各個瀏覽器的問題……這個是js的問題,和ajax關(guān)系不大吧?
忘掉了可能多人在同時使用同一個應(yīng)用(Forgetting that multiple people might be using the same application at the same time) 嗯,這其實是一個同步的問題,在b/s系統(tǒng)中這是一個麻煩的問題……當然,也許并不麻煩,做一個標記位就解決了吧?
太多代碼讓瀏覽器慢下來(Too much code makes the browser slow) 呃……同意這點,雖然在代碼優(yōu)化之后會有很大改善,但js本身運行速度慢這個缺陷還是會成為一個瓶頸。
不計劃要那些禁用或者沒有js的用戶(Not having a plan for those who do not enable or have JavaScript) 呃……我在頁面上用ajax的時候就準備放棄這些用戶了,我沒google那么閑,作兩套系統(tǒng),一套用ajax,一套純頁面。不過養(yǎng)成一個良好的編碼習(xí)慣還是有必要,比如在超鏈接中不要直接設(shè)置href="javascript:..."而使用onmouseup或者onclick來觸發(fā)事件,偶爾也為別人考慮考慮嘛,而且我也不能保證我的js程序在所有的瀏覽器上通吃。
不期然的頁面閃爍和改變(Blinking and changing parts of the page unexpectedly) 我沒經(jīng)歷過以前網(wǎng)頁中blink標簽的騷擾,所以我對作者的反感有點摸不著頭腦,我覺得在適當?shù)奶崾局笏⑿履硥K頁面總比整個頁面的刷新看起來舒服。
沒法把超鏈接發(fā)給朋友以及收藏(Not using links I can pass to friends or bookmark) 嘿嘿,這就是我上面提及的那點,如果編碼習(xí)慣夠好--而且時間夠多,在超鏈接中為非js用戶和js用戶提供兩套方案是可行的。
同步導(dǎo)致的批量操作(Asynchronously performing batch operations) 作者的意思是說ajax一次性把原來要分幾次作的操作一次做掉,而導(dǎo)致他沒法跟蹤每個元素變化,沒法回溯,呃……也許是有這種需求吧。。不過似乎也是可以解決的吧?
導(dǎo)致頁面滾動并讓我迷失位置(Scrolling the page and making me lose my place) 作者認為插入文本到一個頁面中會導(dǎo)致頁面發(fā)生滾動,并讓其迷失方向,我沒看過這么惡心的效果,沒法評價,不過我對于一些ajax的導(dǎo)航作的不好表示不滿意,我經(jīng)常會迷失于一些ajax程序中而不知道我剛才上一步到了哪里……
發(fā)明了新的UI習(xí)慣(Inventing new UI conventions) 呵呵,作者用了一句話來描述這個缺點:“點擊一個不明顯的東東來產(chǎn)生一個不明顯的結(jié)果”。這個歸納倒是滿準確的,在很多ajax程序中,用戶完全是作為一個瞎子,在抖抖索索的摸著這個ajax程序大象,在到處瞎點一氣并瞎拖一氣之后才掌握這個程序的用法。但是換個角度來說,最開始的web頁面不也是一樣?沒有開始的困難接觸,不會有之后的進步,只要有足夠的幫助,上手任何東西都應(yīng)該不會太難--除非這東西本來就不想讓人覺得好用,那就是其它的問題了。
阻止了爬蟲(Blocking Spidering) 同意這點,我在猶豫著使用ajax的時候,就在考慮爬蟲對js的不感冒,以及爬蟲該如何理解我那些以奇怪方式加載的頁面,去解析ajax庫似乎是一個不可能的事情,爬蟲又不是人腦,如果爬蟲可以媲美人腦,那就是《駭客帝國4》了。
字符集(Character Sets) ajax本身對字符集的支持比較缺失,這個這個……設(shè)置成utf-8吧,不過作者最后也是這么說的。
使用超鏈接改變狀態(tài)(Changing state with links (GET requests)) 作者認為主流的ajax應(yīng)用程序都是用get方式來工作,而這違反了W3對GET和POST方法的使用建議……我少見多怪,主流的ajax應(yīng)用程序我沒怎么去看,不知道是不是真的都用get,雖然ajax編碼用get簡單,但不表示ajax不能用post吧?
沒有連帶改變頁面中其它相關(guān)部分(Not cascading local changes to other parts of the page) 因為ajax讓人很容易控制頁面中的特定部分,所以也容易導(dǎo)致過于關(guān)注某個點而失去對整體布局的關(guān)注。嗯嗯……這是編碼的問題,表怪到ajax頭上。
問題報告(Problem reporting) 作者認為服務(wù)端的程序錯誤,很容易再現(xiàn)并捕捉,而客戶端的錯誤要重現(xiàn)就比較麻煩,嗯,支持這點,不過還是和ajax關(guān)系不大……
投資回報(Return on Investment) 作者認為ajax能夠提升應(yīng)用程序的可用性,但是富客戶端程序并不會比純html版本好多少……忽略這個觀點,來人,把作者拖出去,賬責五十
拙劣地模仿瀏覽器頁面跳轉(zhuǎn)行為(Mimicing browser page navigation behavior imperfectly) ……忽略,沒看到作者所描述的情況。
經(jīng)典論壇討論: http://bbs.blueidea.com/viewthread.php?tid=2648121
出處:藍色理想
責任編輯:moby
◎進入論壇網(wǎng)頁制作、網(wǎng)站綜合版塊參加討論
|