用事實說話!AJAX應用程式開發七宗罪

來源:互聯網
上載者:User
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建立內容。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.