- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Javascript 的异步编程分析.doc
基于Javascript 的异步编程分析
摘要:异步编程带来的问题在客户端Javascript中并不明显,但随着服务器端Javascript越来越广的被使用,大量的异步IO操作使得该问题变得明显。许多不同的方法都可以解决这个问题,本文针对此问题讨论了一些方法。
关键词:异步编程;Javascript;异步IO
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)13-0080-02
Abstract: Asynchronous programming problems caused by the client Javascript is not obvious, but with the server-side Javascript is used more widely, a large number of asynchronous IO operation so that the problem becomes apparent. Many different methods can solve this problem, this paper discusses some of the ways this problem.
Key words: Asynchronous Programming; Javascript; Asynchronous IO
1 JavaScript 异步编程简述
异步指的是函数的调用并不直接返回执行的结果,而往往是通过回调函数异步的执行。回调函数,其实就是调用用户提供的函数,该函数往往是以参数的形式提供的。回调函数并不一定是异步执行的。
varfn = function(callback) {
// do something here
…
callback.apply(this, para);
};
varmycallback = function(parameter) {
// do someting in customer callback
};
// call the fn with callback as parameter
fn(mycallback);
上述的例子中,回调函数是被同步执行的。大部分语言都支持回调,C++可用通过函数指针或者回调对象,Java一般也是使用回调对象。
在Javascript中有很多通过回调函数来执行的异步调用,例如setTimeout()或者setInterval()
setTimeout(function(){
console.log(this will be exectued after 1 second!);
},1000);
上例中,setTimeout直接返回,匿名函数会在1000毫秒后异步触发并执行,完成打印控制台的操作。也就是说在异步操作的情境下,函数直接返回,把控制权交给回调函数,回调函数会在以后的某一个时间片被调度执行。之所以要实现异步,则需要熟悉Javascript的线程模型。
2 Javascript线程模型和事件驱动
Javascript是单线程的,为了能实现异步执行,就需要明白Javascript在浏览器中的事件驱动(event driven)机制。事件驱动一般通过事件循环(event loop)和事件队列(event queue)来实现的。假定浏览器中有一个专门用于事件调度的实例,该实例可以是一个线程,我们可以称之为事件分发线程event dispatch thread,该实例的工作就是一个不结束的循环,从事件队列中取出事件,处理所有很事件关联的回调函数(event handler)。注意回调函数是在Javascript的主线程中运行的,而非事件分发线程中,以保证事件处理不会发生阻塞。
通过事件驱动机制,可以想象Javascript的编程模型就是响应一系列的事件,执行对应的回调函数。很多UI框架都采用这样的模型。异步的主要目的是处理非阻塞,在和HTML交互的过程中,会需要一些IO操作,如果这些操作是同步的,就会阻塞其它操作,用户的体验就是页面失去了响应。
由此可见Javascript通过事件驱动机制,在单线程模型下,以异步回调函数的形式来实现非阻塞的IO操作。
3 Javascript异步编程的缺陷
Javascript的单线程模型有很多好处,但同时也带来了很多问题。
3.1 代码可读性
如果某个操作需要经过多个非阻塞的IO操作,每一个结果都是通过回调如下所示:
operation1(function(
您可能关注的文档
最近下载
- 直流屏验收标准.docx VIP
- 基于光纤光栅的综采工作面刮板输送机直线度检测与控制方法.pdf
- 4.2 华测CGO2.0软件操作实训教材.pdf VIP
- 小学二年级学习资料 【57】二年级上册语文全册一课一练.pdf VIP
- 世界现代化的历程.pptx VIP
- 华医继续教育常见检验指标的临床诊断价值题库答案.docx VIP
- 苏教版三年级上册数学全册教学设计(配2025年秋新版教材).docx
- 2015三峡大学(修改版)水电站课程设计计算书3.pdf VIP
- 水文水资源软件:SWAT二次开发_(17).SWAT二次开发常见问题与解决方案.docx VIP
- 消防空调安装施工方案鲁班奖.doc VIP
文档评论(0)