精读《深刻浅出Node.js》

前言

若是你想要深刻学习Node,那你不能错过《深刻浅出Node.js》这本书,它从不一样的视角介绍了 Node 内在的特色和结构。由首章Node 介绍为索引,涉及Node 的各个方面,主要内容包含模块机制的揭示、异步I/O 实现原理的展示、异步编程的探讨、内存控制的介绍、二进制数据Buffer 的细节、Node 中的网络编程基础、Node 中的Web 开发、进程间的消息传递、Node 测试以及经过Node 构建产品须要的注意事项。最后的附录介绍了Node 的安装、调试、编码规范和NPM 仓库等事宜。在读这本书的过程当中我收获颇多,并用思惟导图的方式记录下来,方便本身后期温故。若是你恰好没有读过,能够当作度这本书的预习阅读,相信你也会有所收获(思惟导图图片可能有点小,记得点开看)git

第1章 Node简介

第2章 模块机制

CommonJS提出的规范均十分简单,可是现实意义却十分强大。Node经过模块规范,组织了 自身的原生模块,弥补JavaScript弱结构性的问题,造成了稳定的结构,并向外提供服务。NPM 经过对包规范的支持,有效地组织了第三方模块,这使得项目开发中的依赖问题获得很好的解决, 并有效提供了分享和传播的平台,借助第三方开源力量,使得Node第三方模块的发展速度前所未 有,这对于其余后端JavaScript语言实现而言是从未有过的。从必定的角度上讲,CommonJS规范 帮助Node造成了它的骨骼。只有茁壮的根,才能培养出茂盛的枝叶,并成长为参天大树。正是这 些底层的规范和实践,使得Node有序地发展着,摆脱掉过去JavaScript纷乱和被误解的局面,进 而进化成良性的生态系统。

第3章 异步I/O

本章介绍了异步I/O和另外一些非I/O的异步方法。能够看出,事件循环是异步实现的核心,它 与浏览器中的执行模型基本保持了一致。而像古老的Rhino,尽管是较早就能在服务器端运行的 JavaScript运行时,可是执行模型并不像浏览器采用事件驱动,而是像其余语言通常采用同步I/O 做为主要模型,这形成它在性能上无所发挥。Node正是依靠构建了一套完善的高性能异步I/O框 架,打破了JavaScript在服务器端止步不前的局面。

第4章 异步编程

在接触Node的过程当中,不少人粗略地接触了几个回调函数以后就放弃了。尽管异步编程略微 艰难,可是并不是一无可取,一旦习惯,就显得天然。从社区和过往的经验而言,JavaScript异步编 程的难题已经基本解决,不管是经过事件,仍是经过Promise/Deferred模式,或者流程控制库。相 信在掌握以上技巧以后,异步编程不是难事,习惯异步编程以后,将会收获许多值得享受的编程 体验。

本章主要介绍了主流的几种异步编程解决方案,这是目前JavaScript中主要使用的方案。但对 于其余语言而言,还有协程(coroutine)等方式。可是因为Node基于V8的缘由,在目前EMCAScript5 的实现下还不支持协程。这些标准和规范还在制定中,因此暂时不做介绍。将来的V8若是支持 Generator,也将在Node中能直接使用。github

最后,由于人们老是习惯性地以线性的方式进行思考,以至异步编程相对较为难以掌握。这 个世界以异步运行的本质是不会由于你们线性思惟的惯性而改变。就像日出月落不会由于你的心 情而改变其自有的运行轨迹。编程

第5章 内存控制

Node将JavaScript的主要应用场景扩展到了服务器端,相应要考虑的细节也与浏览器端不一样, 须要更严谨地为每一份资源做出安排。总的来讲,内存在Node中不能为所欲为地使用,但也不是 彻底不擅长。本章介绍了内存的各类限制,但愿读者能够在使用中规避禁忌,与生态系统中的各 种软件搭配,发挥Node的长处。后端

第6章 理解Buffer

体验过JavaScript友好的字符串操做后,有些开发者可能会造成思惟定势,将Buffer当作字 符串来理解。但字符串与Buffer之间有实质上的差别,即Buffer是二进制数据,字符串与Buffer 之间存在编码关系。所以,理解Buffer的诸多细节十分必要,对于如何高效处理二进制数据十 分有用。

第7章 网络编程

Node基于事件驱动和非阻塞设计,在分布式环境中尤为能发挥出它的特长,基于事件驱动可 以实现与大量的客户端进行链接,非阻塞设计则让它能够更好地提高网络的响应吞吐。Node提供 了相对底层的网络调用,以及基于事件的编程接口,使得开发者在这些模块上十分轻松地构建网 络应用。下一章咱们将在本章的基础上探讨具体的Web应用。

第8章 构建Web应用

本章涉及的内容较为丰富,在Web应用的整个构建过程当中,从处理请求到响应请求的整个过 程都有原理性阐述,整理本章细节就能够完成一个功能完备的Web开发框架。过去的各类Web技 术,随着框架和库的成型,开发者每每迷糊地知道应用框架和库,殊不知道细节的实现,这比如 没有地图却在野地里行进。本章的内容但愿能为Node开发者带来地图似的启发,在开发Web应用 时可以心有轮廓,明了细微。

如今知名和成熟的Web框架有Connect、Express等,本章中的内容在这些框架中都有实现, 由于行文的缘由,本章中的代码实现得较为粗糙,实际使用请使用这些成熟的框架。浏览器

第9章 玩转进程

尽管Node从单线程的角度来说它有够脆弱的:既不能充分利用多核CPU资源,稳定性也无 法获得保障。可是群体的力量是强大的,经过简单的主从模式,就能够将应用的质量提高一个 档次。在实际的复杂业务中,咱们可能要启动不少子进程来处理任务,结构甚至远比主从模式 复杂,可是每一个子进程应当是简单到只作好一件事,而后经过进程间通讯技术将它们链接起来 便可。这符合Unix的设计理念,每一个进程只作一件事,并作好一件事,将复杂分解为简单,将 简单组合成强大。服务器

尽管经过 child_process 模块能够大幅提高Node的稳定性,可是一旦主进程出现问题, 所 有子进程将会失去管理。在Node的进程管理以外,还须要用监听进程数量或监听日志的方式确 保整个系统的稳定性,即便主进程出错退出,也能及时获得监控警报,使得开发者能够及时处 理故障。微信

第10章 测试

测试是应用或者系统最重要的质量保证手段。有单元测试实践的项目,必然对代码的粒度和 层次都掌握得较好。单元测试可以保证项目每一个局部的正确性,也可以在项目迭代过程当中很好地 监督和反馈迭代质量。若是没有单元测试,就如同黑夜里没有秉烛的行走。网络

对于性能,在编码过程当中必定存在部分感性认知,与实际状况有部分误差,而性能测试则能 很好地斧正这种差别。框架

第11章 产品化

通常而言,决定用一项技术进行产品开发时,只有最先期是与这门技术彻底相关的。随着时 间的迁移,要解决的已经不是原来的问题了,一门技术只能在必定层面上发挥出它的优点来。用 Node也是同样,随着开发的进展、涉及层面的增多,咱们看到在产品的角度要解决的问题依然是 大部分技术都要解决的问题。咱们但愿读者可以将Node归入到新的层面上进行考虑,使它更适应 产品,在产品中发挥出更大的优点来。

扩展

思惟导图能比较清晰的还原整本书的知识结构体系,若是你还没用看过这本书,能够按照这个思惟导图的思路快速预习一遍,提升学习效率。学习新事物总容易遗忘,我比较喜欢在看书的时候用思惟导图作些记录,便于本身后期复习,若是你已经看过了这本书,也建议你收藏复习。若是你有神马建议或则想法,欢迎留言或加我微信交流:646321933异步

精读《图解HTTP》

《深刻浅出Node.js》PDF

思惟导图下载地址

相关文章
相关标签/搜索