专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

研究Promise方式实现Node。js实践应用论文

  Node。js是建立在ChromeV8引擎的javaScript运行时之上的平台,用于构建快速、可扩展的Web应用程序。Node。js采用单线程、事件驱动、非阻塞的IO模型,这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率,使其轻量又高效。传统的Node。js在处理异步问题时,一般采用的是callback回调的方式。callback回调存在一个很严重的金字塔问题大量的回调函数慢慢向右侧屏幕延伸的一种状态。
  Promise是异步编程的一种解决方案,比传统的解决方案回调函数和事件,更合理和强大。它最早由javascript社区提出和实现,目前最新的JavaScript语言标准ES6已将其写进了标准中,统一了用法,原生提供了Promise对象。借助Promise对象,可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
  本文就是采用Promise方式在Node。js平台上搭建了一个网络爬虫的应用。本文首先介绍了Node。js平台以及其相关的一些特点和概念,然后在此基础上,针对其传统的callback的回调方式的回调地狱等问题,引入了Promise对象来处理这种异步回调的问题。通过深入分析Promise对象的理论知识以及规范,将其合理地运用到网络爬虫的应用中去。最后通过爬取一个课程网站的视频课程信息,充分展示了Node。js平台的强大和方便,以及Promise对象在处理异步回调问题上的优越性以及新思路。
  1。Node。js平台介绍
  Node。js是一位叫RyanDahl的程序员发明的。他的工作是用CC写高性能Web服务。对于高性能,异步IO、事件驱动是基本原则,但是用CC写就太痛苦了。于是Ryan开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以,最终,Ryan瞄向了JavaScript。因为JavaScript是单线程执行,根本不能进行同步IO操作,所以,JavaScript的这一缺陷导致了它只能使用异步IO。
  选定了开发语言,还要有运行时引擎。Ryan曾考虑过自己写一个,不过明智地放弃了,因为V8就是开源的JavaScript引擎。让Google投资去优化V8,我们只管拿过来用就好了。于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node。js。Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node。js一下子就火了起来。Node。js主要特点是(1)时间驱动、异步编程;(2)单进程单线程。
  1。1事件驱动、异步编程
  事件驱动并不是Node。js专属,在某些传统语言的网络编程中,我们会用到回调函数,比如当socket资源达到某种状态时,注册的回调函数就会执行。Node。js的设计思想中以事件驱动为核心,它提供的绝大多数API都是基于事件的、异步的风格。以Net模块为例,其中的net。Socket对象就有以下事件:connect、data、end、timeout、drain、error、close等,使用Node。js的开发人员需要根据自己的业务逻辑注册相应的回调函数。这些回调函数都是异步执行的,这意味着虽然在代码结构中,这些函数看似是依次注册的,但是它们并不依赖于自身出现的顺序,而是等待相应的事件触发。事件驱动、异步编程的设计重要的优势在于,充分利用了系统资源,执行代码无须阻塞等待某种操作完成,有限的资源可以用于其他的任务。此类设计非常适合于后端的网络服务编程,Node。js的目标也在于此。在服务器开发中,并发的请求处理是个大问题,阻塞式的函数会导致资源浪费和时间延迟。通过事件注册、异步函数,开发人员可以提高资源的利用率,性能也会改善。从Node。js提供的支持模块中,我们可以看到包括文件操作在内的许多函数都是异步执行的,这和传统语言存在区别,而且为了方便服务器开发,Node。js的网络模块特别多,包括HTTP、DNS、NET、UDP、HTTPS、TLS等,开发人员可以在此基础上快速构建Web服务器。
  1。2单进程单线程
  1。2。1高性能
  Node。js单线程模式避免了传统php那样频繁创建、切换线程的花销,执行速度更快。而且,资源占用小,Node。js在大负荷下对内存占用任然很低。
  1。2。2线程安全
  单线程的node。js还保证了绝对的线程安全,不用担心统一变量同时被多个线程进行读写而造成程序崩溃。线程安全的同时也解放了开发人员,免去了多线程编程中忘记对变量加锁或者解锁造成的隐患。
  2。Promise
  Promise主要解决JavaScript中异步的场景。Promise是个对象,同JavaScript中其它对象没什么区别,但同时它也是一个规范,针对异步操作约定了统一的接口,表示一个一步操作最终的结果,以同步的方式来写代码,执行的操作是异步的,但是又保证程序的执行顺序是同步的。这原本是JavaScript社区的一个规范的构想,现在已经被加入到了ES6的语言标准中,Firefox和Chrome等浏览器已经对它进行了实现。
  2。1同步与异步
  JS引擎是单线程的。这意味着在任何环境中,只有一段JS代码会被执行。每个函数是一个不可分割的片段或者代码块。当JS引擎开始执行一个函数(比如回调函数)时,它就会把这个函数执行完,只有执行完这段代码才会继续执行后面的代码。这就是JS中的同步。Promise对象的then()方法就是同步处理每个Promise对象。异步是指在执行一段代码时,这段代码依赖一些其他的操作或者数据,这时就不用等待数据或者操作的返回,直接执行下一段代码,当有数据或操作返回时再去响应之前的代码,从而提高代码执行的效率。
  2。2Promise对象的状态
  Promise对象只有三种状态:
  (1)Pending:初始状态,进行中。
  (2)Resolved(或Fulfilled):成功的操作。
  (3)Rejected:失败的操作。
  (1)Promise对象的状态不受外界影响。
  Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
  (2)Promise对象一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,再对Promise对象添加回调函数,也会立即得到这个结果。
  2。3Promise的核心方法
  Promise对象的核心部件是它的then方法,它的作用是为Promise实例添加状态改变时的回调函数。then方法接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为Resolved时调用,第二个回调函数是Promise对象的状态变为Rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。Promise对象另一个核心方法是它的catch方法,用于指定发生错误时的回调函数,是then(null,rejection)的别名。catch方法可以捕捉promise实例中的异常还能捕获在它之前太狠方法中发生的异常,所以在实际的使用中,多用catch方法来取代then(null,rejection)处理异常。
  3。爬虫应用设计与实现
  3。1模块加载
  新建一个promisecrawler。js文件,首先把需要的相应的模块加载进来。http模块:主要用于搭建HTTP服务端和客户端,使用HTTP服务器或客户端功能必须调用http模块;bluebird模块:Promise类库(在最新的Node。js里已经引入了Promise模块,可直接使用,但考虑到兼容性问题,本例中采用bluebird模块);cheerio模块:类似于前端的jQuery,能够简单方便地操作装在后台的html。
  3。2组织数据结构
  首先在chrome浏览器中打开需要爬取的网页,同时打开控制台查看网页htmlDOM结构,分析出所需信息,组织好数据结构,然后根据DOM结构去获取所需信息。
  3。3Promise主要流程
  本例中完成的主要功能是,同时爬取一个课程网站的多个页面,获取相关信息,然后将数据按照组织好的数据结构打印出来。代码中所用到的Promise。all方法用于将多个Promise实例,包装成一个新的Promise实例。该方法接收一个Promise对象数组作为参数,p1、p2、p3都是Promise对象的实例。p的状态由p1、p2、p3决定,分成两种情况。
  (1)只有p1、p2、p3的状态都变成Resolved,p的状态才会变成Resolved,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
  (2)只要p1、p2、p3之中有一个被rejected,p的状态就变成Rejected,此时第一个被Rejected的实例的返回值,会传递给p的回调函数。
  3。4相关函数实现
  3。4。1爬取页面getPageAsync(url)
  通过http模块的get方法爬取页面数据,最后返回一个Promise对象,方便异步处理。
  3。4。2过滤数据filterChapters(html)
  过滤出每个页面所需的数据,然后按一定的数据结构组织起来。
  3。4。3打印数据printCourseInfo(coursesData)
  将爬取到的数据,按照组织好的数据结构打印出来。
  3。4实验结果
  执行promisecrawler。js文件,即可看到输出的相关信息实验中同爬取了4个页面,可以看到,实验结果是按照代码中设定好的数据结构爬取并打印出来的,符合实验预期。Promise对象是基于异步的方式来处理程序的。爬取每个页面时,不用等待页面的数据处理完毕再去爬取下一个页面,而是无阻塞不间断的去爬取每个页面,当有异步的数据返回时调用Promise对象的resolve()方法去处理,出现错误异常时调用reject()方法去解决。当有多个Promise对象时,调用then(onFulfilled)方法,同步处理每个Promise对象,一旦处理哪个Promise对象出错时,可以立即调用catch方法处理异常,中止程序往下执行,及时发现错误。而且onFulfilled()方法每次返回的是新的Promise对象,这样保证了then()可以一直链式调用下去,提高了程序的效率和可靠性。
  4。结语
  Node。js作为一门新兴的技术,打通了前后端的界限。由于采用事件驱动和无阻塞模型,可以很方便的构建高效、可扩展的网络应用,这是Node。js最大的一个优点,同时也是最大的一个缺点,由于事件驱动和无阻塞模型是建立在callback这种回调方式上的,随着回调的增加,代码嵌套的层次就会增加,这样很容易陷入回调地狱,这种代码难以编写,难以理解而且难以维护。Promise对象是解决Node。js中异步回调的一种很有效的方式。借助Promise对象,可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。在保证异步回调的基础上又实现了多个promise对象之间的同步顺序,使程序能快速高效的执行下去,给我们的开发带来很大的便利。

自动化论文题目在确定论文题目之前,先要确定论文研究方向,导师通常都会建议我们大量阅读往届毕业生的论文,从中再根据自己的实际情况来确定研究方向,下面为大家分享了自动化的论文题目,一起来看看吧!1微给水管网优化设计理论与方法的论文1给水管网优化设计理论与方法给水管网优化设计的研究包括管网优化设计模型和优化算法两个方面,优化设计模型需要相应的优化算法进行求解。随着计算机的出现及其应用软件的开发,两者在理论和工广西少数民族的生态伦理思想及其重要意义的论文生态文明建设关系人民福祉,关乎民族未来。从201x年起,广西在全区持续开展美丽广西乡村建设活动,以清洁家园清洁田园清洁水源为切入点,目标是清洁环境美化乡村培育新风造福群众。随着工作校企合作在电子信息教学的应用论文1校企合作模式的介绍及特点校企合作,简单来说,就是指学校和企业进行合作办学的模式。随着现在经济全球化的发展,社会也开始了前所未有的激烈竞争,各学校在教育行业竞争中,为了要增强自己综关于广告学专业调查实践教学案例探析论文本次专业调查是广告学专业课堂教学的延续采用了抽样调查。典型调查。访谈法。观察法的市场调查方法,利用实地采访互联网和查阅文献真实获取信息的手段相结合,对河南广告产业竞争力现状搜集资料国家出资者财务管理刍论的管理论文摘要自十届全国人民代表大会第一次会议批准设立国务院国资委以来,国有资产管理体制在新形势下的运作已经历时三年,本文试图结合国内的实际情况,对国家出资者财务管理的特点和原则再作一番梳理声乐教学中审美观的塑造论文声乐在我国有着非常久远的历史,是一种以乐器和人声为载体的音乐形式,很多看似没有联系的东西,内部却存在着很多的联系。在人类开展文艺活动的过程中,美是一种客观存在的事物,每个人都有激发幼儿园教师的的性价值论文幼儿园教师是一个特殊的教师群体,这个群体以何种素养去履行使命,直接关乎幼儿教育的质量。以下是小编为大家整理好的幼儿园教师的的性价值论文,欢迎大家阅读参考!摘要对幼儿园教师来说,加强关于论文的小感想可能评职称的人最关心的就是论文了。因为论文是评职称的门槛,不过了这道门槛就别想评职。但很多人不是用心去写论文,而是去想办法去买。花上几百元,让别人代写一篇,然后就拿去评职称了。但是写好学位论文的方法怎么写好学位论文?早在几年前,我国的研究生数量就已突破百万,教育规模仅次于美国。招生规模持续扩大的同时,不可避免的是,选题要新文献要准结构要出色语言要精彩从开题到答辩,硕士博士研究关于小水电站技术管理的论文现阶段,人民生活水平在逐步提升,家电设备和用电量都在逐步增加,国内多个地区的小水电站如雨后春笋般出现。特别是在南方降雨较多地区,小水电站的建设给人们的生产生活带来前所未有的便利。为
科技在美术课堂中的应用研究科技在美术课堂中的应用研究科技在基础教育中的应用越来越广泛,有效的融入科学技术,灵活的使用各种教学辅助工具,这不仅能够化解很多传统课堂教学上一些难以解决的问题,这也可以让知识的呈现人与科技人与科技莎士比亚在哈姆雷特中说人是一件多么了不起的杰作!多么高贵的理性!多么伟大的力量!多么优美的仪表!多么文雅的举动!在行为上多么像一个天使!在智慧上多么像一个天神!宇宙的精华!基于河北省深州市马家口村科技扶贫体制案例分析一背景简介马家口村位于深州市东南,离县城大概50里地。全村仅有126户人家,人口共计500人。全村大概有850亩地。除了能靠种地满足自家的口粮,种粮的收入几乎为零。改革开放以来,该科技引领企业发展创新带领群众致富在胶东半岛,有一个土生土长的农民企业家杨荣明,一提起他大家都竖起大拇指。杨荣明从1995年带领13人从事园林绿化工作,到2006年资产总额数千万元,拥有职工65人。自2007年公司石油机械制造企业的科技创新探微石油机械制造企业的科技创新探微1石油机械开发和创新的必要性随着我国国民经济的进一步发展,企业在市场经济体制下,面邻的竞争越来越激烈,为了保证企业能够在激烈的市场竞争中占有一席之地,企业工商管理中科技创新的作用分析与研究企业工商管理中科技创新的作用分析与研究当前阶段的市场竞争越发激烈,企业为了能够在激烈的市场竞争中抢占先机,必须要对科技创新的运用加以重视,通过多样化措施的运用,全面提高企业科技创新新形势下企业思想政治工作研究广大朋友们,关于ldquo新形势下企业思想政治工作研究rdquo是由品学网论文网论文频道小编特别编辑整理的,相信对需要各式各样的论文朋友有一定的帮助!一抓根本,深入扎实地进行思想政完善舟山渔农村公共文化服务体系研究品学网论文网论文频道一路陪伴考生编写大小论文,其中有开心也有失落。在此,小编又为朋友编辑了ldquo完善舟山渔农村公共文化服务体系研究rdquo,希望朋友们可以用得着!总书记在党的思想政治工作为企业生产经营工作服务研究广大朋友们,关于ldquo思想政治工作为企业生产经营工作服务研究rdquo是由品学网论文网论文频道小编特别编辑整理的,相信对需要各式各样的论文朋友有一定的帮助!一抓住关键,促进思想中国哲学简史读书笔记论文中国哲学简史是冯友兰先生六书纪贞元,三史释今古哲学体系中的三史之一。本书是冯友兰先生哲学与思想融铸的结晶,讲述了中国哲学的发展历史,打通了古今中外的相关知识,在有限的篇幅里融入了冯建构富有道理的当代中国哲学论文习近平同志在哲学社会科学工作座谈会上指出要按照立足中国借鉴外国,挖掘历史把握当代,关怀人类面向未来的思路,着力构建中国特色哲学社会科学,在指导思想学科体系学术体系话语体系等方面充分
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网