JavaScript 異步編程

JavaScript 異步編程html

第一章 深刻理解JavaScript事件java

1. javascirpt通常是單線程執行,setTimeout 和 setIntervalnode

僅當cpu空閒時執行。編程

    var start = new Date; setTimeout(function(){promise

    var end = new Date;服務器

    console.log('Time elapsed:', end - start, 'ms'); }, 500);多線程

    while (new Date - start < 1000) {};併發

 

 

解釋: setTimeout,有一個延遲事件排入隊列,來處理事件。先進先出。和事件的綁定機制同樣,dom元素上先綁定先執行。app

 

 

2. 異步類型,主要分爲I/O異步和計時異步框架

I/O異步主要是XMLHttpRequest請求。計時異步則爲setTimeout何setInterval等。在nodeJs中函數名稱中添加Sync和Async來區分是否異步。

 

3. 異步函數編寫以及異步異常處理, TODO 將來進一步分析

 

4. 第一階段主要使用回調函數

第二章 分佈式事件

1. 分佈式事件主要利用PubSub模式。具體有Node的EventEmitter對象,Backbone的事件化模型,以及jQuery的自定義事件。

原理:我寫過jQuery的自定義事件,基本原理是一個事件源,同時可使得多個地方同步響應。jQuery版本1.7+後優先使用on

 

2.  對call和apply機制還須要研究 TODO

第三章 Promise對象和Deferred對象

1. Promise和Deferred將回調複雜耦合的結構進行解耦,結構簡潔,便於擴展。 (jQuery 1.5+支持)

var promise = $.get('/mydata');                 promise.done(onSuccess); promise.fail(onFailure);   promise.always(onAlways);

 

 

2. Python的Twisted框架 =》 dojo.Deferred對象提出了Promises/A規範

 

3. 

always 在jQuery 1.6+中支持

var promptDeferred = new $.Deferred();      promptDeferred.always(function(){ 

    console.log('A choice was made:'); }); 

promptDeferred.done(function(){ console.log('Starting game...'); }); 

promptDeferred.fail(function(){ console.log('No game today.'); });

 

異步操做生成Promise對象,而提現能夠定義Deferred對象,用於異步結果處理。

 

$('#playGame').focus().on('keypress', function(e)   { 

    var Y = 121, N = 110;

if (e.keyCode === Y) {

    promptDeferred.resolve();

} else if (e.keyCode === N) {

    promptDeferred.reject(); } else {

    return false; // 這裏的 Deferred 對象保持着掛起狀態 };

});

 

 

 

4. $.when

 

5. promise.pipe

 

6. jQuery的Promise和CommonJS的Promises/A基本同樣,Q.js庫是最流行的Promises/A實現。jQueyr1.8 then來替代pipe. 

 

 

過去幾年,Promise是jQuery最激動人心的新特性之一。再將來返回Promise對象的JavaScript API越多,這些API就越有吸引力。

 

Promise本人接觸的還不多,將來在實際工做中還須要進一步分析和研究,不斷提升JavaScript中異步處理的能力。

第四章 Async.js的工做流控制

async.js主要應用在node.js的服務器端,可使得用寫同步的方式來寫異步函數。

 

主要提供的函數有:

1. async.filter

2. async.forEach

3. async.filterSeries 和 async.forEachSeries

4. 等參考API設計

5.async.series

6.async.parallel

7.async.queue 相似於銀行多窗口工做方式

 

async.js的可替代品爲step.js,比較簡潔,能夠自定義各類併發函數。

async.js已經成爲了數一數二的工做流控制庫,它既提供了健壯的迭代式數據收集方法,又實現了可靠的調度 任務的方法。若是遇到了工做流控制問題,Async.js 極可能有解決方 案。若是你喜歡本身解決,不妨使用 Step。

第五章 worker對象的多線程技術

1. worker容許同時啓用多個線程

第六章 異步的腳本加載

1. 主要介紹了<script>標籤的放置位置

2. HTML5中async/defer對異步加載的支持

    defer會在html解析完畢以後再執行;window.load後執行,在DOMcontentLoaded以前。

    async表示若是腳本知足條件則執行,可能非順序執行腳本。

3. yepnope和Request.js對異步加載的支持

相關文章
相關標籤/搜索