接觸了兩個新詞: 同步\異步

ajax在實際應用中是要選擇同步還是異步 


Ajax在網頁中最大的一個優點是它可以訪問服務器上的信息而不需要重新加載網頁。這意味着要檢索或是更新信息的某一小個部分的時候,只需要從服務器端傳送那一部分需要的信息而不需要重新下載整個網頁。


  Ajax可以通過兩種方法訪問服務器,即同步(腳本會停留並等待服務器發送回覆然後再繼續)和異步(腳本允許頁面繼續其進程並處理可能的回覆)。


  同步處理你的請求有一點像重新加載頁面但是只需要下載要求的信息而不是整個頁面。因此這一方法會比不使用Ajax要快一些因爲信息的下載量要小,所以檢索的速度就快了。但是要使用這個方法需要你的訪客等待下載請求的出現。雖然你的訪客已經習慣了等待下載整個頁面,但是他們還不習慣在與網頁互動的時候進行等待,因此除非你要求的信息是小到可以迅速下載完的,否則用戶是不會耐心去等待的。


  異步處理避免了服務器檢索時候的延時問題,因爲你的訪客可以繼續在頁面進行操作,而要求的信息也可以在更新頁面的同時得到處理。對於較大的請求來說,所需的響應時間較長,但是如果使用異步處理,那麼訪客不會特別意識到延時所帶來的麻煩,因爲他們的注意力仍然放在對頁面的操作上。而對於那些瞬時的響應,你的訪客甚至根本不會意識到服務器發出了這樣的請求。


  因此使用異步調用是Ajax中比較受青睞的方法,這種方法可以爲訪客的訪問提供更便捷的服務,使得他們更愉悅,也避免了Ajax干擾其他頁面的操作。


  如果異步調用對於訪客來說是可以提供比同步調用更方便的訪問的話,那麼爲什麼Ajax還要爲我們提供同步調用呢?雖然異步調用的使用率幾乎是百分之百,但是總是有一些例外情況的。在極少見的情況下,讓你的訪客在某一特定服務器端的處理過程結束前,讓你的訪客繼續操作頁面是沒有什麼意義的。如果是碰到這樣的情況,或許根本不要使用Ajax而只是重新載入整個頁面。Ajax中的同步選擇是爲極少數既不能使用異步調用也不能重新載入整個頁面的情況而準備的。雖然這樣的情況不多,但是它們確確實實存在,因此爲以防萬一Ajax需要準備同步調用。


  對於很多初學者來說,容易掉入使用同步調用的誤區,即便是在更適合使用異步調用的時候,他們還是一如既往地選擇同步調用。造成這一情況的原因主要是因爲同步調用更容易讓人理解整個進程是怎樣運行的。事實上,除了不需要等待響應以外,異步調用的工作原理和同步調用大同小異。


  兩者唯一的區別是在使用異步調用的時候,我們可以設置多個Ajax調用,這個調用是重疊的,即在前一個還沒有響應的時候就可以發出第二個調用。這就異步調用比同步調用看上去要複雜一些的原因,因爲你需要確定每個Ajax請求使用的都是單獨的Ajax對象而不是所有的Ajaz請求都重複使用相同的對象。如果多個異步調用使用的是同一個對象那麼響應處理器只會處理收到的第一個響應,而且會忽視其他後續響應。使用帶有相同對象的重疊的Ajax調用,我們沒有一個確鑿的方法可以分辨出究竟哪個響應被處理了,也不知道該響應是否與發出的請求順序一致。而爲每個Ajax調用使用單獨的對象,我們就可以獲得相應的響應,響應處理器也能夠準確對它們進行分辨。


  異步使用Ajax對於大多數情況來說都是更好的選擇。如果你只需從頁面發出一個Ajax調用,那麼,除了那個指定要怎樣處理調用的參數以外,其編碼方式和同步調用沒有什麼不同。在相同頁面使用多個Ajax調用,唯一的複雜的地方是你需要爲每個請求創建一個單獨的Ajax對象。各種類型的Ajax庫可以爲你做好這樣,唯一需要你編寫異步調用代碼的情況是你需要與同步調用不同的操作。


原帖:http://wenku.baidu.com/link?url=i1s6V7DskkAaFaNjB4H53cDrN2aep2sU0LtxmCOHTXK13cfZTzs_cEbYQrgZ78k30q4V6feLh7EH8-vO0XX8rdm7cXM0toAo_wW5D-fEXke


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章