在线试读
1 Node简介
Node应该是如今*火热的技术了,从本章开始,我们将逐步揭示它的诸多细节。
1.1 Node的诞生历程
NodelJ,3诞生历程如下所示。
2009年3月,RyanDahl在其博客上宣布准备基于V8创建一个轻量级的Web务器并提供一套库。
2009年5月,RyanDalai在GitHub上发布了*初的版本。
2009年12月和2010年4月,两届JSConfJ(会都安排了Node的讲座。
2010年年底,Node获得硅谷云计算服务商Joyent公司的资助,其创始人Joyent公司全职负责Node的发展。
2011年7月,Node在微软的支持下发布了其Windows版本。
2011年1lYl,Node超越RubyonRails,成为GitHub上关注度*高的项目(随后被Bootstrap项目超越,目前仍居*二)。
2012年1月底,RyanDahl在~Node架构设计满意的情况下,将*门人的身份转交给IsaacZ.Schlueter,自己转向一些研究项目。IsaacZSchlueter是Node的包管理器NPM的作者,之后Node的版本发布和bug修复等工作由他接手。截到笔者执笔之曰(2013年7月13日),发布的Node稳定版为v0.10.13,非稳定版为v0.11.4,NPM的官方模块数达到34943个,模块的周下载量为1479万次。
随后,Node的发布计划主要集中在性能提升上,在v0.14之后,正式发布vI.O版本。
1.2 Node的命名与起源
在Node的官方网站之外,N0dc具有很多别称:Nodejs、NodeJS、Node.is等。本书在写作过程中遵循官方的说法,将会一直使用Node这个名字,但是在当前语境之外,为了与其余表示节点的技术或名词相区别,均可以带上is表明它是Node。在听到这些词汇时,应该意识到,它们说的是一码事。除了本书的封面和此处会用到N0dejs外,其余地方都会以Node作为正式称谓。
Node名字的来由,其实跟它的起源是有密切关系的。
1.2.1 为什么是JavaScript
RvanDahl是一名*深的C/C++程序员,在创造出N0de之前,他的主要工作都是围绕高性能we服务器进行的。经历过一些尝试和失败之后,他找到了设计高性能,WebH~务器的几个要点:事件驱动、非阻塞I/O。
所以RvanDahl*初的目标是写一个基于事件驱动、非阻塞I/O的Web服务器,以达到更高的性能,提供Apache等服务器之外的选择。他提到,大多数人不设计一种更简单和更有效率的程序的主要原因是他们用到了阻塞I/O的库。写作Node的时候,RyanDahl~评估过C、Lua、Haskell、Ruby等语言作为备选实现,结论为:C的开发门槛高,可以预见不会有太多的*发者能将它用于日常的业务开发,所以舍弃它;RyanDahl觉得自己还不足够玩转Haskell,所以舍弃它;Lua自身已经含有很多阻塞I/0库,为其构建非阻塞I/O库也不能改变人们继续使用阻塞I/0库的习惯,所以也舍弃它;而Ruby的虚拟机由于性能不好而落选。
相比之下,JavaSCriptt:gC的开发门槛要低,比Lua的历史包袱要少。尽管服务器端JavaScript存在已经很多年了,但是后端部分一直没有市场,可以说历史包袱为零,为其导人非阻塞I/0库没有额外阻力。另外,JavaScript4览器中有广泛的事件驱动方面的应用,暗合RyanDahl喜好基于事件驱动的需求。当时,*二次浏览器大战也渐渐分出高下,Chrome浏览器的JavaSCript引擎V8摘得性能*一的桂冠,而EL其基于新BSD许可证发布,自然受到RyanDahl的欢迎。考虑到高性能、符合事件驱动、没有历史包袱这3个主要原因.JavaScript成N(Node~J实现语言。
1.2.2 为什么叫Node
起初,RyanDahl称他的项目为web.js,就是一个We服务器,但是项目的发展超过了他*初单纯开发一个Web服务器的想法,变成了构建网络应用的一个基础框架,这样可以在它的基础上构建更多的东西,诸如服务器、客户端、命令行工具等。Node为一个强制不共享任何资源的单线程、单进程系统,包含十分适宜网络的库,为构建大型分布式应用程序提供基础设施,其目标也是成为一个构建快速、可伸缩的网络应用平台。它自身非常简单,通过通信协议来组织许多N0de,非常容易通过扩展来达成构建大型网络应用的目的。每一个Node进程都构成这个网络应用中的一个节点,这是它名字所含意义的真谛
……
查看全部
内容介绍
《深入浅出Node.js》从不同的视角介绍了Node内在的特点和结构。由首章Node介绍为索引,涉及Node的各个方面,主要内容包含模块机制的揭示、异步I/O实现原理的展现、异步编程的探讨、内存控制的介绍、二进制数据Buffer的细节、Node中的网络编程基础、Node中的Web开发、进程间的消息传递、Node测试以及通过Node构建产品需要的注意事项。最后的附录介绍了Node的安装、调试、编码规范和NPM仓库等事宜。 《深入浅出Node.js》适合想深入了解Node的人员阅读。
朴灵,真名田永强,文艺型码农,就职于阿里巴巴数据平台,资深工程师,Node.js布道者,写了多篇文章介绍Node.js的细节。活跃于CNode社区,是线下会议NodeParty的组织者和JSConf China(沪JS和京JS)的组织者之一。热爱开源,多个Node.js模块的作者。个人GitHub地址:http://github.com/JacksonTian。叩首问路,码梦为生。