JavaScript 异步编程

JavaScript 异步编程

第一章 深入理解JavaScript事件

1. javascirpt一般是单线程执行,setTimeout 和 setInterval

仅当cpu空闲时执行。

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

var end = new Date;

console.log(‘Time elapsed:‘, end - start, ‘ms‘); }, 500);

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

解释: setTimeout,有一个延迟事件排入队列,来处理事件。先进先出。和事件的绑定机制一样,dom元素上先绑定先执行。

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对异步加载的支持

时间: 2024-11-08 16:48:53

JavaScript 异步编程的相关文章

JavaScript异步编程设计快速响应的网络应用

JavaScript已然成为了多媒体.多任务.多内核网络世界中的一种单线程语言.其利用事件模型处理异步触发任务的行为成就了JavaScript作为开发语言的利器.如何深入理解和掌握JavaScript异步编程变得尤为重要!!!<JavaScript异步编程设计快速响应的网络应用>提供了一些方法和灵感. 一.深入理解JavaScript事件 1. 事件的调度 JavaScript事件处理器在线程空闲之前不会运行(空闲时运行). var start = new Date(); setTimeout

JavaScript异步编程(一) 深入理解JavaScript事件

JavaScript异步编程 深入理解JavaScript事件 ?事件的调度 JavaScript事件处理器在线程空闲之前不会运行 线程的阻塞 var start = new Date(); // setTimeout和setInterval的计时精度比期望值差 setTimeout(function(){ var end = new Date(); console.log('Time elapsed', end - start, 'ms'); }, 500); while(new Date -

JavaScript异步编程(2)- 先驱者:jsDeferred

原文出处: linkFly   欢迎分享原创到伯乐头条 JavaScript当前有众多实现异步编程的方式,最为耀眼的就是ECMAScript 6规范中的Promise对象,它来自于CommonJS小组的努力:Promise/A+规范. 研究javascript的异步编程,jsDeferred也是有必要探索的:因为Promise/A+规范的制定基本上是奠定在jsDeferred上,它是javascript异步编程中里程碑式的作品.jsDeferred自身的实现也是非常有意思的. 本文将探讨项目js

Javascript异步编程方法之------“事件监听”

Javascript异步编程方法之------“事件监听”另一种思路是采用事件驱动模式.任务的执行不取决于代码的顺序,而取决于某个事件是否发生.还是以f1和f2为例.首先,为f1绑定一个事件(这里采用的jQuery的写法).f1.on('done', f2);上面这行代码的意思是,当f1发生done事件,就执行f2.然后,对f1进行改写:function f1(){setTimeout(function () {// f1的任务代码f1.trigger('done');}, 1000);}f1.

Javascript异步编程方法之------“发布/订阅”

Javascript异步编程方法之------“发布/订阅”我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行.这就叫做"发布/订阅模式"(publish-subscribe pattern),又称"观察者模式"(observer pattern).这个模式有多种实现

深入解析Javascript异步编程

这里深入探讨下Javascript的异步编程技术.(P.S. 本文较长,请准备好瓜子可乐 :D) 一. Javascript异步编程简介 至少在语言级别上,Javascript是单线程的,因此异步编程对其尤为重要. 拿nodejs来说,外壳是一层js语言,这是用户操作的层面,在这个层次上它是单线程运行的,也就是说我们不能像Java.Python这类语言在语言级别使用多线程能力.取而代之的是,nodejs编程中大量使用了异步编程技术,这是为了高效使用硬件,同时也可以不造成同步阻塞.不过nodejs

5分种让你了解javascript异步编程的前世今生,从onclick到await/async

javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为浏览器设计的GUI编程语言,GUI编程的特性之一是保证UI线程一定不能阻塞,否则体验不佳,甚至界面卡死. 一般安卓开发,会有一个界面线程,一个后台线程,保证界面的流畅.由于javascript是单线程,所以采用异步非阻塞的编程模式,javascript的绝大多数api都是异步api. 本文是本人的一个

Javascript异步编程之二回调函数

上一节讲异步原理的时候基本上把回掉函数也捎带讲了一些,这节主要举几个例子来具体化一下.在开始之前,首先要明白一件事,在javascript里函数可以作为参数进行传递,这里涉及到高阶函数的概念,大家可以自行google一下. 传统的同步函数需要返回一个结果的话都是通过return语句实现,例如: function foo() { var a = 3, b = 2; return a+b; } var c = foo(); console.log(c); //5 就是说后面的代码console.lo

转: Promises与Javascript异步编程

在如今都追求用户体验的时代,Ajax应用真的是无所不在.加上这些年浏览器技术.HTML5以及CSS3等的发展,越来越多的富Web应用出现:在给与我们良好体验的同时,Web开发人员在背后需要处理越来越多的异步回调逻辑. 笔者对最近读完的<Async Javascript-Build More Responsive Apps with Less Code>(Javascript异步编程-设计快速响应的网络应用)一书以及部分资料,整理了我认为比较重要的一些点以及容易理解错的地方,使大家对 Promi