DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> javascript同步和異步的區別與實現方式
javascript同步和異步的區別與實現方式
編輯:JavaScript基礎知識     

題外話:

“我最不喜歡的編程語言”排行榜第一名除了javascript別無他選

可惜的是在mobi項目的三個月除了javascript和SP就沒寫過其他什麼。。

所以,迎難而上,該解決的一定要解決了

-------------------------------------------------------------------------------------------------------------------

javascript語言是單線程機制。所謂單線程就是按次序執行,執行完一個任務再執行下一個。

對於浏覽器來說,也就是無法在渲染頁面的同時執行代碼。

單線程機制的優點在於實現起來較為簡單,運行環境相對簡單。缺點在於,如果中間有任務需要響應時間過長,經常會導致

頁面加載錯誤或者浏覽器無響應的狀況。這就是所謂的“同步模式”,程序執行順序與任務排列順序一致。對於浏覽器來說,

同步模式效率較低,耗時長的任務都應該使用異步模式;而在服務器端,異步模式則是唯一的模式,如果采用同步模式個人認為

服務器很快就會出現12306在高峰期的表現。。。。

 

異步模式的四種方式:

1.回調函數callback

所謂回調函數,就是將函數作為參數傳到需要回調的函數內部再執行。

典型的例子就是發送ajax請求。例如:

     $.ajax({

    async: false, 

    cache: false,

    dataType: 'json',

    url: "url",

    success: function(data) {

      console.log('success');

    },

    error: function(data) {

     console.log('error');

    }

  })

 

當發送ajax請求後,等待回應的過程不會堵塞程序運行,耗時的操作相當於延後執行。

回調函數的優點在於簡單,容易理解,但是可讀性較差,耦合度較高,不易於維護。

 

2.事件驅動

javascript可以稱之為是基於對象的語言,而基於對象的基本特征就是事件驅動(Event-Driven)。

事件驅動,指的是由鼠標和熱鍵的動作引發的一連串的程序操作。

例如,為頁面上的某個

$('#btn').onclick(function(){

   console.log('click button');

});

 

綁定事件相當於在元素上進行監聽,是否執行注冊的事件代碼取決於事件是否發生。

優點在於容易理解,一個元素上可以綁定多個事件,有利於實現模塊化;但是缺點在於稱為事件驅動的模型後,流程不清晰。

 

3.發布/訂閱

發布訂閱模式(publish-subscribe pattern)又稱為觀察者模式(Observer pattern)。

該模式中,有兩類對象:觀察者和目標對象。目標對象中存在著一份觀察者的列表,當目標對象

的狀態發生改變時,主動通知觀察者,從而建立一種發布/訂閱的關系。

jquery有相關的插件,在這不是重點不細說了。。。。回頭寫個實現貼上來

 

4.promise模式

promise對象是CommonJS工作組提供的一種規范,用於異步編程的統一接口。

promise對象通常實現一種then的方法,用來在注冊狀態發生改變時作為對應的回調函數。

promise模式在任何時刻都處於以下三種狀態之一:未完成(unfulfilled)、已完成(resolved)和拒絕(rejected)。以CommonJS Promise/A 標准為例,promise對象上的then方法負責添加針對已完成和拒絕狀態下的處理函數。then方法會返回另一個promise對象,以便於形成promise管道,這種返回promise對象的方式能夠支持開發人員把異步操作串聯起來,如then(resolvedHandler, rejectedHandler); 。resolvedHandler 回調函數在promise對象進入完成狀態時會觸發,並傳遞結果;rejectedHandler函數會在拒絕狀態下調用。

Jquery在1.5的版本中引入了一個新的概念叫Deferred,就是CommonJS promise A標准的一種衍生。可以在jQuery中創建

$.Deferref的對象。同時也對發送ajax請求以及數據類型有了新的修改,參考JQuery API。

 

---------------------------------------------------------------------------------------------------------------------

除了以上四種,javascript中還可以利用各種函數模擬異步方式,更有詭異的諸如用同步調用異步的case

只能用team裡同事形容java和javascript的一句話作為結尾:

“寫java像在高速路上開車,寫javascript像在草原上開車”-------------以此來形容javascript這種無類型的語言有多自由

but,如果草原上都是坑。。。。。。javascript同步和異步

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved