一、创始
Node.js 最初是由 Ryan Dahl 创建的,目的是为了构建高度可伸缩的网络应用程序。在2009年的JSConf上,Ryan Dahl 首次介绍了 Node.js 概念,并以非常简短的代码演示了 Node.js 的特性。因为除了传统的使用阻塞 I/O 的方法,Node.js 采用了非阻塞 I/O 和事件驱动等特性,因此受到了广大 Web 开发者的关注与青睐。
Node.js 最初在V8 JavaScript 引擎的基础上构建,并使用 C++ 编写 V8 绑定。最初的 Node.js 版本就是这种结构,在此后的多个版本中,Node.js 的核心架构并没有变化:
├── deps
│ ├── http_parser
│ ├── libuv
│ ├── openssl
│ └── v8
├── doc
├── lib
├── src
│ ├── node
│ ├── platform_darwin.cc
│ ├── platform_freebsd.cc
│ ├── platform_linux.cc
│ ├── …
│ └── uv-common.h
├── test
├── tools
├── .gitattributes
├── .gitignore
├── README.md
└── configure
二、版本演进
1. Node.js 0.2.x
在最初的几个版本中,Node.js 只能运行最基本的 HTTP 服务器。版本 0.2.x 是第一个稳定版,并引入了类似于事件机制的 EventEmitter。事件驱动模式是 Node.js 的基本概念,EventEmitter 是 Node.js 投入实际应用运行的重要事件机制。这一版的 Node.js 还添加了 HTTP 客户端,这使得 Node.js 可以不仅可以运行制作服务器,也可制作客户端和类似 Shell 脚本的工具。
2. Node.js 0.4.x
版本 0.4.x 在 2011 年正式发布,添加了特性包括:TCP、HTTP、TLS、加密方式等。Node.js 成为自己构建 Web 应用的最佳选择,在这一版本中,Node.js 开始自己构建自己,从几个基本库到现在几乎完整的标准库集合。
3. Node.js 0.6.x
在 2011 年年底的神奇节骨眼,Node.js 发布了版本 0.6.x。这一版中,V8 引擎升级到了 3.1, EventEmitter 类被进一步完善。Node.js 还添加了 STREAM,允许开发者操作底层的 Unix 文件句柄,从而直接与操作系统交互,使得 Node.js 可以更加容易扩展到更多底层 APIs。
4. Node.js 0.8.x
版本 0.8.x 在 2012 年正式发布。在此版本中,V8 引擎升级至 3.11.10,Node.js 开始从核心 API 中提取出基础部分,形成独立的模块和库。Node.js 的代码分离和模块化使得它成为灵活的各种应用程序的构建工具。此版本还加入了 DNS、TLS-PSK、TLS-SNI、TLS NPN 以及 poll 和 epoll 基础设施。
5. Node.js 0.10.x
版本 0.10.x 被认为是 Node.js 的关键版本。这一版中包含大量的 API 和模块,是首个长期支持发布版本。在 0.10 版本中,Node.js 也成为了大规模企业级应用的构建工具。开发者们开始热情洋溢,开始不断发布新的模块、库以及工具,包括Pomelo、Express、Grunt和Gulp等。
6. Node.js 0.12.x
版本 0.12.x 是 Node.js 稳定发行版。在此版本中,Node.js 带来了互操作性和模块性的提升,支持 ECMAScript 新特性,例如 Map、Set、Promise 等。
7. Node.js 4.x
2015年6月,Node.js 发布了 4.0,它标志着集成io.js项目的终结,Node.js 公布计划解决过去版本的问题,并为构建应用程序扩展了更多的 API。Node.js 开始支持最新的 JavaScript 标准(ES6)。这一版本还加入了个性化调试、多核集成、Native NPM 模块和更多稳定版本 API。
8. Node.js 5.x
版本 5.x 的目的在于向 ES6 的新特性发布,同时也提供了更多更改新特性的 API。这一版中还引入了 prebuilt Linux 存档工具,因为许多用户表示他们在构建本地 Node.js 模块中遇到了各种问题。
9. Node.js 6.x、7.x 和 8.x
随后的版本基本上都符合所定义的“六个月发布计划”,每半年发布一个稳定版本。版本 6.x 是第一个实现长期稳定的版本,它于 2016 年发布。除了模块集之外,虽然其 API 与 Node.js 5.x 相似,但有几个基本想法已经改变了。例如,在 6.x 版本中,所有错误都由状态代码和信息组成。
三、小结
通过以上的介绍,我们可以清晰地了解 Node.js 历史版本的演进。Node.js 在经历了多个版本的迭代之后,不断地完善其核心架构和基础设施,迎合业界的需求,发展成为现在备受欢迎的高效 JavaScript 运行环境。Node.js 的历史证明了它一直在和时代紧密共进步,未来的 Node.js 也将在这条道路上兴盛发展。