1. 程式人生 > >Web_Http同步和非同步請求區別

Web_Http同步和非同步請求區別

舉個例子:普通B/S模式(同步)AJAX技術(非同步) 

同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 

非同步: 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢 


同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。 

非同步就是你叫我,然後自己去吃飯,我得到訊息後可能立即走,也可能等到下班才去吃飯。 

所以,要我請你吃飯就用同步的方法,要請我吃飯就用非同步的方法,這樣你可以省錢。 

請求方式,分為GET與POST: 

GET 

最為常見的HTTP請求,普通上網瀏覽頁面就是GET。GET方式的引數請求直接跟在URL後,以問號開始。(JS中用 window.location.search獲得)。引數可以用encodeURIComponent進行編碼,使用方式: 



var EnParam = encodeURIComponent(param); 

URL只支援大約2K的長度,即2048字元數;使用GET進行AJAX請求時候會快取導致出現的頁面不是正確的,一般方法加random引數值;ajax.send(null)。 

POST 

向伺服器提交資料用到。 

需要將form表單中的值先取出轉換成字串,用&符號連線,(同GET傳引數一樣);提交資料量2GB ;使用ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'),處理提交的字串;ajax.send(strings),這個 strings表示form中需要提交的內容,例如a=1&b=2類似這樣的字串。 




同步與非同步: 

舉個例子:普通B/S模式(同步)AJAX技術(非同步) 
同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 
非同步: 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢 

ajax.open方法中,第3個引數是設同步或者非同步。prototype等js類庫一般都預設為非同步,即設為true。先說下同步的情況 下,js會等待請求返回,獲取status。不需要onreadystatechange事件處理函式。而非同步則需要 onreadystatechange事件處理,且值為4再正確處理下面的內容。 

//同步傳輸模式 


function RequestByGet(nProducttemp,nCountrytemp) 

    var xmlhttp 

    if (window.XMLHttpRequest) 
    { 
         //isIE   =   false; 
         xmlhttp   =   new   XMLHttpRequest(); 
    } 
    else if (window.ActiveXObject) 
    { 
         //isIE   =   true; 
         xmlhttp   =   new   ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    //Web page location. 
    var URL="http://www.baidu.com/; 
    xmlhttp.open("GET",URL, false); 
    //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=Shift_JIS") 
    xmlhttp.send(null); 
    var result = xmlhttp.status; 

    //OK 
    if(result==200) 
    { 
        document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText; 
    } 
    xmlhttp = null; 



//非同步傳輸模式 
var xmlhttp 

function RequestByGet(nProducttemp,nCountrytemp) 

    if (window.XMLHttpRequest) 
    { 
         //isIE   =   false; 
         xmlhttp   =   new   XMLHttpRequest(); 
    } 
    else if (window.ActiveXObject) 
    { 
         //isIE   =   true; 
         xmlhttp   =   new   ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    //Web page location. 
    var URL="http://www.baidu.com/"; 
    xmlhttp.open("GET",URL, true); 
    xmlhttp.onreadystatechange = handleResponse; 
    //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=UTF-8") 
    xmlhttp.send(null); 


function handleResponse() 

    if(xmlhttp.readyState == 4 && xmlhttp.status==200) 
    { 
        document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText; 
        xmlhttp = null; 
    } 

同步執行模式: 
所謂同步執行模式,是指語句在同步執行模式下,將始終保持對程式流的控制,直至 程式結束。如查詢操作,客戶機上的應用程式在向伺服器發出查詢操作的指令後,將 一直等待伺服器將查詢結果返回客戶機端,然後才繼續進行下一步操作。 
眾所周知,應用程式要從一個大表中刪除所有的記錄將是非常耗時的,如果應用程式 採用的是單執行緒(thread)同步執行方式,某次刪除工作很可能耽誤其他重要工作的完 成。如果應用程式等待的是遠端任務,那麼遠端伺服器失敗或網路故障或一些無法預 知的情況都可能使應用程式無限期地等下去,這是同步執行最大的缺陷。 
但是同步執行模式可以簡化程式編制的複雜性。程式設計師可以不用過多地瞭解比較複雜 的ODBC 2.0 API 的使用,而只需使用 ODBC 的同步執行模式或使用資料控制項和資料庫物件變數來編寫應用程式,可以提高開發效率,但程式執行速度比不上非同步執行 模式的速度。 

非同步執行模式: 
所謂非同步執行模式,是指語句在非同步執行模式下,各語句執行結 束的順序與語句執行開始的順序並不一定相同。例如 查詢操作,客戶機上的應用程式在向伺服器發出了查 詢操作的指令後,將立刻執行查詢語句指令的下一條 語句,而不需要等到伺服器將查詢結果返回客戶機端。 非同步執行方式使應用程式能擺 脫單個任務的牽制,提高了靈活性和應用程式的執行 效率。但非同步執行模式也存在一些問題,如它增加了 程式設計的複雜性,特別是編寫互用性(interoperable)要求較高 的程式。 
在負荷很重的客戶/伺服器系 統中,適宜採用非同步執行模式。在這種環境下,時間 延遲頻繁且漫長,相比之下非同步執行的開銷微不足 道。但是,如果應用執行的環境比較複雜,則必須建 立一套完整的機制,週期性地檢查函式執行的狀態, 以決定下一步執行方案。進行週期的檢查可以有多種方法,如在 應用中設定計時器並處理WM_TIMER資訊等。 
雖然使用非同步執行模式在程式設計 序時十分複雜,但可以實現多工並行執行,使執行的效率大大提高。 
選擇並設定執行模式 在應用程式開發中選擇同步模式還是非同步模式,是一個比 較複雜的層次。當查詢或對資料庫的修改相對簡單時,同步執行模式是一種 很好的選擇,它能夠在幾秒 或更少的時間內返回結果資料。另外,在應用程式獲 得結果集前不能繼續執行時,根本不必要使用非同步執 行模式。在複雜查詢情況下,特別是複雜的多行資料 庫的UPDATE 或DELETE 操作,可能需要很長的時間才能完成, 需採用非同步執行模式,讓使用者可以同時對程式的其他 部分進行操作。 
對於一般程式設計師來說,如果他對同步執行模式與非同步執行模式不瞭解, 他往往會在對伺服器發出一個操作語句(查詢或讀取一條記錄等 操作)後,立該引用伺服器返回的執行結果,或者對該 結果進行下一步操作,這是很危險的。因為,在非同步 執行模式下,客戶機上的後續語句是在該操作語句發 出後接著執行的,但由於各種原因,伺服器不一定能 執行完該操作語句,並在後續語句執行前將結果返回 客戶機。因此,後續語句在引用前一操作語句的執行 結果時,往往會因為該執行結果並不存在而引用了錯 誤的值,造成系統錯誤或死鎖,所以在實際應用中應 根據具體情況慎重選擇執行模式。    

相關推薦

Web_Http同步非同步請求區別

舉個例子:普通B/S模式(同步)AJAX技術(非同步) 同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 非同步: 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢 同步就是你叫我去吃飯,我

Java執行緒-同步非同步區別

1.                                         &nb

Ajax同步非同步區別,如何解決跨域問題

同步的概念應該是來自於OS中關於同步的概念:不同程序為協同完成某項工作而在先後次序上調整(通過阻塞,喚醒等方式).同步強調的是順序性.誰先誰後.非同步則不存在這種順序性. 同步:瀏覽器訪問伺服器請求,使用者看得到頁面重新整理,重新發請求,等請求完,頁面重新整理,新內容出現,使用者看到新內容,進行下一步操作。

注意ajax的同步非同步請求

預設 一般ajax 或者 ajax工具  都是 非同步請求的。 但是 在開發中,使用了一個 開源的 前端ui裡面自帶的ajax工具, 文件寫錯了, 把 非同步請求 和 同步請求的配置引數搞反了。 不小心 設定成了 同步的 ajax, 這可坑爹了,  比如 同步請求

並行併發,同步非同步區別

  老是忘記併發和並行,同步和非同步之間的區別,今天寫篇部落格,加深印象。 併發 & 並行  併發:當有多個執行緒在操作時,如果系統只有一個CPU,則它根本不可能真正同時進行一個以上的執行緒,它只能把CPU執行時間劃分成若干個時間段,再將時間段分配給各個執行緒執行

同步非同步區別

同步: 同步的思想是:所有的操作都做完,才返回給使用者。這樣使用者線上等待的時間太長,給使用者一種卡死了的感覺(就是系統遷移中,點選了遷移,介面就不動了,但是程式還在執行,卡死了的感覺)。這種情況下,使用者不能關閉介面,如果關閉了,即遷移程式就中斷了。 非同步:

同步非同步區別及優缺點

同步和非同步的區別及優缺點 程式裡面的同步和非同步和我們現實生活理解不太一樣,一般我們對同步的理解是同時做很多事情,但程式中的同步是按照任務的順序執行任務,前一個任務沒有執行結束,下一個任務不會執行,要等待上一個任務執行結束。 通俗舉例: 我大學有個室友袁大炮,我們都叫他炮哥。大學開

Http 同步非同步區別

舉個例子:普通B/S模式(同步)AJAX技術(非同步)  同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事  非同步: 請求通過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢  同步就是你叫我去吃飯,我聽到了就和你去吃飯;如果沒有

同步非同步區別

同步的思想是:所有的操作都做完,才返回給使用者。這樣使用者線上等待的時間太長,給使用者一種卡死了的感覺(就是系統遷移中,點選了遷移,介面就不動了,但是程式還在執行,卡死了的感覺)。這種情況下,使用者不能關閉介面,如果關閉了,即遷移程式就中斷了。 非同步: 將使

【Linux】同步非同步區別

同步:同步的思想就是使用者首先發送一個請求,那麼伺服器將要把使用者的請求都處理完成後,在會通知使用者,那麼這樣就會造成使用者等待實踐太長,比如說我們在瀏覽器點了一個功能,那麼點選了以後使用者沒有反應,其

Java --- 執行緒同步非同步區別

1. Java 執行緒 同步與非同步 多執行緒併發時,多個執行緒同時請求同一個資源,必然導致此資源的資料不安全,A執行緒修改了B執行緒的處理的資料,而B執行緒又修改了A執行緒處理的數理。顯然這是由於全域性資源造成的,有時為了解決此問題,優先考慮使用區域性變數,

簡述同步非同步區別

同步是阻塞模式,非同步是非阻塞模式。 同步就是指一個程序在執行某個請求的時候,若該請求需要一段時間才能返回資訊,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去; 非同步是指程序不需要一直等下去,而是繼續執行下面的操作,不管其 他程序的狀態。當有

深刻理解ajax中同步非同步區別使用場景

先上兩段程式碼,猜下這兩段程式碼的console.log的執行順序和結果: 程式碼一: $.ajax({ type: "post", async:tr

Java 同步 非同步區別、聯絡

對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題, 但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。 為了更好的理解併發和同步,我們需要先明白

網路通訊——socket(TCP/IP).Http,同步非同步區別

1首先說下同步和非同步的區別吧 同步:提交請求->等待伺服器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 (比如 普通B/S模式) 非同步:請求通過事件觸發->伺服器處理

Java之阻塞非阻塞以及同步非同步區別

阻塞和非阻塞,同步和非同步1 例子故事:老王燒開水。出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。老王想了想,有好幾種等待方式1.老王用水壺煮水,並且站在那裡,不管水開沒開,每隔一定時間看看水開了沒。-同步阻塞老王想了想,這種方法不夠聰明。2.老王還

支付寶的同步非同步區別

同步是給客戶看的,非同步是伺服器處理請求。 同步是客戶充值或者支付成功了,給客戶一個提示,告訴客戶這個操作的結果是成功還是失敗。起到的作用就是提示客戶這個操作的結果是成功還是失敗。 非同步是伺服器在後端處理支付成功或失敗時的業務邏輯。 同步通知:用於使用者在支付寶頁面

Okhttp之同步非同步請求簡單分析

在讀這篇部落格之前,如果想了解okhttp更多原理,可移步博主的okhttp分類部落格。用過okhttp的應該都瞭解,Okhttp是支援同步和非同步請求的,本篇就就對其原理做一個簡單的梳理。算是加深okhttp的理解。 同步請求使用方式如下: Respo

程序執行緒的區別同步非同步區別?並行併發的區別

程序是資源的分配和排程的一個獨立單元,而執行緒是CPU排程的基本單元 同一個程序中可以包括多個執行緒,並且執行緒共享整個程序的資源(暫存器、堆疊、上下文),一個進行至少包括一個執行緒。 程序的建立呼叫fork或者vfork,而執行緒的建立呼叫pthread_create,程序結束後它擁有的所有執行緒都將銷燬

ajax中async同步非同步區別使用技巧

在網上看了很多關於ajax中同步和非同步的區別,這個同步的意思是當JS程式碼載入到當前AJAX的時候會把頁面裡所有的程式碼停止載入,頁面出去假死狀態,當這個AJAX執 行完畢後才會繼續執行其他程式碼頁