在開發AJAX程式的過程中,許多人會犯一些常見的錯誤,有些錯誤可能會危及到AJAX程式的功能和效能,讓AJAX程式的優勢損失殆盡。這裡筆者將為大家介紹開發AJAX程序過程中需要注意的七大罪。
AJAX是一個好東西,它可以讓開發人員更快更有效的建立更具動態效果的應用程式。但是它也有自身的不足。
乍看之下,具備一些常識似乎就能夠避免這些缺陷,在某種程度上來看,的確如此。但是與對手DHTML相比,AJAX程式的架構完全不同。無論您在應用程式開發工作中掌握了多少常識,都應該學習前人的經驗教訓。在本文中,我們將這些錯誤稱為“七宗死罪”,但是這些錯誤並不能代表全部的錯誤。
在了解有關AJAX開發過程中的七大致命錯誤之前,我們先來看看七個不是那麼嚴重的錯誤。這些錯誤每個人都會犯。透過Google搜尋一下,你會發現這些錯誤是如此常見。
七宗輕罪
1.濫用後退鍵—這個錯誤很多人都會犯,後退鍵已經成為了許多Web體驗程式中的必備內容。許多AJAX開發新手出於各種原因,都會在AJAX程式中加入後退鍵,但卻發現後退鍵影響了程式功能。這主要是由於Javascript並不是一個很友善的程式語言,其次,開發者重新學習AJAX的開發想法。
對於AJAX新手來說,要接收「後退鍵並不是一個好方案」的想法不是很容易。當我們在頁面的刷新點,或需要用到「Undo」功能時,可以考慮「後退鍵」。但在編碼時一定要三思而後行,否則很容易發生重複刷新的情況。
2.不告知使用者操作的結果-AJAX的工作原理中一部分就是它不使用通常的網頁使用者介面載入程式。因此,您需要設計一些可視的提示,使用戶能夠了解正在發生的狀況。
3.忽略連接-這也是標準的AJAX錯誤:漏做了外部使用者能夠剪下並貼上的URL連結。我們都曾經複製過某個url連結然後將其發送給別人。當我們使用AJAX時,只有採用純手工輸入的方式才能把連結提供給他人。為什麼?因為在AJAX應用程式中,伺服器不提供在Javascript自動產生的這個頁面。不要忽視您的用戶可能感興趣的這項在網路應用中最常見的功能。請花點時間為使用者提供URL位址,因為伺服器不提供。
4.用內容控制取代頁面控制--如果您在尋求動態的內容控制,那麼AJAX應用程式對傳統的客戶端伺服器互動方式的突破對您來說可算一份大禮。但是,這樣同時也會招來禍端:在重寫頁面上某精確位置上的內容以調整用戶的交互體驗時的確能夠進行很好的控制,但是這可能將使您的頁面不再完整。
在很多情況下,我們專注於處理頁面的某個部分,會忘記伺服器不會重新整理頁面。這樣可能會導致頁面零亂,使用戶體驗降低:當他們查看頁面時看的可能是過時的頁面。請關注整個頁面;確保任何出現動態內容的頁面都已更新。
5.累死蜘蛛--AJAX的優點在於無需重裝即可提供給頁面的大量文字;AJAX的缺陷也在於那些無需重裝就可以提供給頁面的大量文字。如果應用程式被設計為對搜尋引擎友好,那麼您應該能夠想到會出現什麼狀況。無論頁面中出現了什麼情況,請務必在最上面植入大量穩定的文本,讓蜘蛛們去玩吧。
6.亂碼-AJAX不能支援多種字元集。這並不是什麼涉及生死的局限性,但是如果忘記這一點可能會導致真正的問題發生。最基本的字符集是UTF-8。無論Javascript發送的是什麼字元集,請不要忘了正確編碼,並根據內容設定伺服器端的字元集。
7.沒有給不支援Javascript的使用者提示-有些瀏覽器不支援Javascript,這些使用者一時不能明白出了什麼狀況。請給他們一些提示。
以上都是一些很容易發現的錯誤。真正的問題都是容易被忽略的。
七宗死罪
1.任由記憶體溢出--任何長期從事開發工作的人都知道什麼是循環引用,並了解循環引用對記憶體管理的危害。 AJAX所使用的Javascript是一種記憶體管理語言。也就是說Javascript具有內建的資訊包收集功能,因此能夠抽取不再有引用路徑使用的變數並重新分配這些變數所使用的記憶體。
任何長期從事開發工作的人都知道什麼是循環引用,並了解循環引用對記憶體管理的危害。 AJAX所使用的Javascript是一種記憶體管理語言。也就是說Javascript具有內建的資訊包收集功能,因此能夠抽取不再有引用路徑使用的變數並重新分配這些變數所使用的記憶體。
現在,問題出來了:在檔案物件模型中,任何檔案樹中的DOM節點都可能被樹中存在的其他元素引用,而無論其是否被其他物件所引用!因此,任何在資訊包收集器中經過標註的被DOM節點向後引用的物件在這一方向上都必須為零,否則它的記憶體就會一直處於已分配狀態。
2.不懂什麼叫「非同步」 --異步這個詞很容易讓不熟悉它的使用者感到緊張。但是如果您為這些使用者所設計的網頁應用程式屬於桌面應用,那麼他們肯定不會感到不安。這是一個致關重要的設計點。大部分網頁應用程式功能與桌面副本非常類似。但是在網頁應用程式中,使用者期望這種虛幻的特徵導致他們截然不同。
使用者在與網頁瀏覽器打交道時會帶有非常不同的偏見和期望,而對於桌面應用中他們並沒有這樣的行為。因此,儘管頁面與伺服器之間頻繁的回應會非常好,非常高效,頁面能夠同時對自身進行修訂,但是這將會使用戶頭暈眼花。因此,您需要遵守兩條守則,並且要考慮到進入用戶視覺範圍內的每個變化:如果對於用戶來說不是很迫切的更新,那麼要使升級更為溫和,不會轉移;如果更新對於用戶與應用程式的互動非常重要,那麼更新要清楚明顯。
3.讓伺服器成瞎子--用戶端與伺服器交流的減少是一大問題,而以前並非如此。在以前,伺服器端的應用程式了解全部情況並且能夠看到全部狀況:每個例外,每次重新加載,每個事件多能被看到並記錄下來,當然伺服器也道到底客戶端是什麼狀況,因為伺服器會記錄下螢幕上顯示的一起。
在AJAX應用中可不是這樣。當有事件發生時,這些事件是與伺服器相互獨立的,也就是說,當客戶端出現問題時,伺服器端並不會馬上知道。在某個位置發現和記錄客戶端發生的事件以及例外,使伺服器能夠追蹤需要干涉的問題。
4.用GET偷懶--GET的作用是找回資料;POST的作用是對GET進行設定。不要在不適當的時候使用GET,即使你認為這樣做沒有危害也不要嘗試。 GET的動作會改變狀態,會改變狀態的連結會讓使用者感到困惑;大部分都認為連結的作用是導航,而不是功能。
5.不監測資料類型--Javascript並非.NET架構中的一部分。儘管這有點讓人傷心,但是它的確為我們展示了一個我們可能會碰到的問題:確認Javascript能夠理解其運行平台上的資料類型,反之,對於.NET或其它也是如此。可能會有多種轉換,您需要一一進行。例如,Ajax.NET Pro資料庫提供能夠轉換.NET和Javascript物件符號的轉換器。
6.有些程式無法關閉--無需刷新頁面的內容動態生成如果沒有關閉時間將會非常糟糕。 How many Web pages hav你看過多少比美國國會議事錄還長的網頁?如果網頁無限延長無疑會是使用者的惡夢,只要想想使用者會怎麼看待永不停止的應用程式就知道了。讓您的網路應用程式具有動態,但是一定要在可行的限度之內。
7.讓Javascript和DOM相互獨立--請記住AJAX是建立在「模型-視覺-控制器」(Model-View-Controller)結構之上,請認真看待這一點。 Javascript屬於模式層,DOM屬於視覺層,而控制器則是銜接他們的婚姻顧問。請確保您的網頁檔案獨立於Javascript之外(這樣對於不支援Javascript的使用者比較有用) – 除非內容本身只在使用者使用Javascript才有意義。在這種情況下,用Javascript來創建內容