在Node的官网 (http://nodejs.org)之外,Node有很多Nodejs、NodeJS、Node.js。当听到这些词汇时,应道意识到,它们其实是一回事。 Node名字的由来,其实跟它的起源有密切关系的。
为什么是JavaScript
Ryan Dahl是一名资深的C/C++程序տ,在创造出Node之前,他的主要工作都是围绕高性能Web服务器的。在经历过一些尝试֖和失败ܾ᠋之后,他找到了设计高性能,Web服务器的几个要点:事件驱动、非阻塞I/O。
所以Ryan Dahl最初的目标是写一个基于事件驱动、非阻塞I/O的Web服务器,以达到更高的性能,提供Apache等服务器之外的选择。他说,大多数人不设计一种更简单和更有效的程序的主要原因是他们用到了阻塞I/O的库。写作Node的时候,Ryan Dahl曾经评估过C、Lua、Haskell、Ruby等语言作为备选实现,结论是:C的开发成本太高,可以预见不会有太多的开发者能将它用于日常的业务开发,所以舍弃它;又觉得自己还不足够玩转Haskell,所以舍弃它;Lua自身已经含有很多阻塞I/O库,为其构建非阻塞I/O库也不能改变人们继续使用阻塞I/O库的习惯,所以也舍弃它;而Ruby的虚拟机由于性能不好而落选。
相比之下,JavaScript比C的开发门槛要低,比Lua的历史包袱要少。尽管服务端JavaScript存在已经很多年了,但是后端部分一直没有市场,可以说历史包袱为零,为其导入非阻塞I/O库没有额外阻力。另外,JavaScript在浏览器中有广泛的事件驱动方面的应用,暗合Ryan Dahl喜好基于事件驱动的需求。当时,第二浏览器大战也渐渐分出高下,Chrome浏览器的JavaScript引擎V8摘得性能第一的桂冠,而且其基于新BSD许可证发布,自然受到Ryan Dahl的欢迎。考虑到高性能、符合事件驱动、没有历史包袱这3个主要原因,JavaScript成为了Node的实现原因。
为什么叫Node
起初,Ryan Dahl称他的项目为web.js,就是一个web服务器,但是项目的发展超过他最初单纯开发一个Web服务器的想法,变成了构建一个网络应用的基础框架,这样可以在它的基础上构建出更多的东西出来,诸如服务器、客户端、命令行工具等。Node发展为一个强制不共享任何资源的单线程、单进程系统,包括十分适宜网络的库,为构建大型分布式应用程序提供基础设施,其目的也是成为一个构建快速、可伸缩的网络应用程序。它自身非常简单,通过通信协议来组织许多Node,非常容易通过扩展来达成构建大型网络应用的目的。每一个Node进程都构成这个网络应用中的节点,这是它名字所含意义的真谛。