top
Loading...
用事實說話!AJAX應用程序開發七宗罪

AJAX bandwagon是個好去處。它帶給你更快、更高效、更強動態的應用。但它也有自身的缺陷。

初一看,具備一些常識似乎就能避免這些缺陷,在一定程度上,的確如此。但從DHTML起源來看,AJAX應用程序充滿了結構性差異。不論你在應用程序開發工作中掌握了多少常識,從別人犯的錯誤中吸取教訓也是有好處的。我們稱這些錯誤為“七宗死罪”,但它們不能代表全部的錯誤。

事實上,在你犯這些致命過失之前,你可能首先犯了一些較輕的錯誤。因此我們從這里著手。這是每個人都可能犯的錯誤。這些錯誤是多么普遍,通過Google搜索一下,你就可以發現大部分的錯誤。

七宗輕罪

1.濫用Back按鈕—這是每個人都會犯的錯誤。Back按鈕在很多網頁程序中已經成為用戶的期望。很多AJAX研發新手在開發AJAX應用程序時,出于多種原因都敏捷地使用著Back按鈕。首先,JavaScript對于它來說不是最友好的語言;其次,AJAX設計中需要一種全新的思考方式。

對于AJAX 研發新手“后退”顯然不是最好的選擇。“后退”是一種你更新頁面,或更常見的,你需要在特定情況下進行“撤銷”時才用到的功能。在進行編碼前應認識到這些,或者你可能重復做功。

2.忘記告訴用戶當前發生的狀況—AJAX工作原理中的一部分是其不使用常規的網頁用戶界面加載程序。因此,你需要明確設計一些可視的提示,使用戶了解正在發生的狀況。

3.忽視鏈接—這也是AJAX的標準失誤:漏做了程序外部用戶可以剪貼的URL鏈接。我們都曾經多少次復制過URL鏈接然后將其發送給別人?當你在使用AJAX 時,提供給你的用戶有用URL鏈接的唯一方法是,手動提供給他們。為什么?因為在AJAX程序中,服務器不提供JavaScript動態生成的這個頁面!不要忽視你的用戶可能感興趣的這個網絡應用中最普通的功能。既然服務器不支持,那你花點功夫為用戶提供URLs。

4.用內容控制替代控制—如果你正在尋找動態的內容控制,那么對傳統的客戶服務器交互作用的突破對你來說可是件好事。但這也是一項罪過:在重寫一個頁面的某精確位置上的內容以調整用戶的交互式體驗時確實確實能夠很好的控制,但這也將使你的頁面不完整。通常,我們專注于處理頁面的某一部分,而忘記服務器不刷新頁面。這會導致頁面凌亂,用戶體驗降低,當他們察看頁面時可能看到過時的頁面!把你的注意力放在整個頁面; 確保出現動態頁面的內容都得到更新。

5.累死蜘蛛 –AJAX的優勢在于無需重裝就可以提供給頁面的大量的文本;AJAX的缺陷在于無需重裝就可以提供給頁面的大量的文本。如果應用被設置為對搜索引擎友好,那么,你能夠想象會出現什么情況。無論頁面中出現了什么,請務必在最上面植入足夠穩定的文本,為蜘蛛們去玩耍吧。

產生亂碼文本—AJAX不支持很多字符集。這不是涉及生死的局限性,但忘記它能夠產生真的問題。最基本的字符集是UTF-8。不論JavaScript發送什么,別忘記正確地編碼,并且根據內容設置服務器端的字符集。

沒有為使用不支持JavaScript的瀏覽器的用戶提供提示--有些瀏覽器不支持JavaScript,用戶一時不能明白出了什么狀況。請給他們提供提示。

實話實說,其中大部分是常識性問題。真正的問題都很容易讓人忽視的。

造成內存泄漏—任何長期從事開發工作的人都知道循環引用,并了解其給內存管理帶來的危害。

AJAX所使用的JavaScript是內存管理的語言。這意味著JavaScript具有內置的信息包收集功能,因此能夠抽取不再有引用路徑使用的變量并重新分配這些變量所使用的內存。

作為基本工作原理這很好,但是在模型對象和察看元素之間互相引用時,由于這些循環引用,你就不能依靠這個功能來實現你的內存使用最優化。從原則上講,對象為零,則元素為零,但是如果這時從元素到對象的向后引用,那么信息包搜集器不會動這些對象。

現在,問題出來了:在文件對象模型中,任何文件樹中的DOM節點都可能被樹中的其它元素引用,不論其是否被其他對象所引用!因此任何在信息包收集器中經過標注的被DOM節點向后引用的對象,在這一方向必須為空,否則其內存就會一直處于已分配狀態。

不了解“異步”的含義--異步很容易讓不熟悉它的用戶感到緊張。但是如果您為這些用戶所設計的網頁應用程序屬于桌面應用程序,那么他們肯定不會感到不安。這是一個至關重要的設計點。大部分網頁應用功能與桌面副本非常類似。但是在網頁應用中,用戶期望這種虛幻的特征導致他們截然不同。

用戶在與網頁瀏覽器打交道時會帶有非常不同的偏見和期望,而對于桌面應用中他們并沒有這樣的行為。因此,盡管頁面與服務器之間頻繁的響應會非常好,非常高效,頁面能夠同時對自身進行修訂,但是這將會使用戶頭暈眼花。因此,您需要遵守兩條守則,要考慮到進入用戶視覺范圍內的每個變化:如果對于用戶來說不是很迫切的更新,那么要使升級更為溫和,不會轉移;如果更新對于用戶與應用的交互非常重要,那么更新要清楚而明顯。

使服務器在黑暗中—用戶端與服務器的交流減少是一大問題,而以前并非如此。在以前,服務器端的應用了解全部情況并且能夠看到全部狀況:每個例外,每次重新加載,每個事件多能被看到并記錄下來,當然服務器也知道客戶端是什么狀況,因為服務器會記錄下屏幕上顯示的一切。

在AJAX應用程序中,問題不是這樣。當有事件發生時,這些事件是與服務器相互獨立的,也就是說,當客戶端出現問題時,服務器端并不會馬上知道。在某個位置發現和記錄客戶端發生的事件以及例外,使服務器能夠盡快追蹤需要干涉的問題。

用GET偷懶—GET用于重新找回數據;POST用于對GET設置。不要在不適當的時候使用GET,即使你認為這樣做沒有危害。GET操作改變狀態,改變狀態的鏈接會令用戶感到困惑;大部分都認為鏈接的作用是導航,而不是功能。

不兼容數據類型--JavaScript不是.NET Framework框架中的一部分。盡管這的確令人傷心,但這呈現給我們一個我們可能會碰到的問題:確定JavaScript能夠理解其運行平臺上的數據類型,反之,對于.NET或其他都是如此。可能會有多種轉換器,你需要把它們找出來。例如,Ajax.NET Pro資料庫,提供能夠轉換.NET 和 JavaScript對象符號的轉換器。

一些應用程序不知道何時關閉--無需刷新頁面的內容動態生成如果沒有關閉時間將會非常糟糕。

你見過多少比美國國會議事錄還長的網頁?如果網頁無限延長無疑會是用戶的噩夢,只要想想用戶會怎么看待永不停止的應用程序就知道了。讓您的網絡應用具有動態效果,但是一定要在可行的限度之內。

保持你的JavaScript遠離你的DOM—請記住AJAX建立在模型-視覺-控制(Model-View-Controller)結構之上。請認真地對待這點。JavaScript屬于模型層面,DOM屬于視覺層面,而控制器是他們的婚姻顧問。保證讓你的網絡文件獨立于JavaScript之外(這樣有利于不支持JavaScript的用戶)--除了當內容自身只在用戶使用JavaScript時才有意義及可操作性。在這種情況中,用JavaScript創建內容。


作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗