Node.js 的发展历程


Node.js

能用 JavaScript 编写的程序,都终将会以 JavaScript 编写。」这句话曾经听起来十分高傲,但是随著 Node.js 的发展,我们渐渐地明白到这句话的远见性──JavaScript 真的越来越强大了。

Node.js 是一个非常新兴的开发工具,它诞生自 2009 年,年龄远不如 Python、Ruby、PHP 等老大哥,但是它确实有史以来发展最快的开发工具,没有之一。在这短短的几年间,我们看到了 Node.js 从当初的一无所有到如今的飞速发展,这是没有任何其他开发工具能够媲美的。

谁创造了 Node.js

Ryan Dahl,网名 ry,虽然如今已经没有多少人了解这一名字。是的,他就是 Node.js 的亲爹,我们依稀还记得那个安装 Node.js 需要执行这行命令的日子。

$ git clone https://github.com/ry/node.git

Node.js 的名字的由来?

其实 Node.js 最开始叫 「Web.js」(发布之前),后来因为 API 设计越来越庞大,ry 和他的团队依稀感觉到 Web.js 已经过于狭隘了,于是就有了现在的名字。

Node.js 发展最快的是什么时候?

API 开始大面积进入 Stable 和 Locked 状态时,大批开发者便开始使用 Node.js 干各种事情,这个区间是 v0.6~v0.8 之间。Joyent 公司收购了 Node.js 原开发团队也是推动力之一。

为什么后来又出现了 Io.js?现在又到哪里去了?

Io.js 的出现是因为在 Node.js 的核心开发者群体中,出现了一些不太友好的性别歧视事件,导致核心开发组与 Joyent 公司决裂,直接从 Node.js 的 GitHub 代码库 Fork 了一个出来,并重命名为 Io.js。而很长一段时间内,Io.js 确实 Node.js 世界真正的主导,因为无论是核心开发者还是核心用户群都聚集在 Io.js 社区中,而且 Io.js 很大的优势便是原生开启 ES Harmony 支持模式,而不需要使用「--harmony」。

合久必分,分久必合。如今 Io.js 社区已经与 Joyent 公司达成共识,代码库再次回归到 Node.js 主线中来,Node.js 开发组委会也由原 Io.js 开发组和 Joyent 公司联合建立。

NPM 现在是怎样的一种存在?

NPM 目前已经是一家独立的公司,由它的发明者 Issac 建立,是如今世界上最大的包管理平台之一,也是发展最快的一个。目前已有 210,081 个模块,每天下载次数达到 83,000,000 次。

Node.js 究竟怎样的一个发展历程?

  1. 混沌期:发布初期,创始人 Ryan Dahl 带著他的团队开发出了以 Web 为中心的“Web.js”,一切都是非常混乱,API大多都还除外研究阶段。
  2. 成长期:Node.js 的核心用户 Isaac Z. Schlueter 开发出奠定了 Node.js 如今地位的重要工具--npm。同时也为他后来成为 Ryan 的接班人的重要条件。
  3. 高速期:connect, express, socket.io 等库的出现吸引了一大波爱好者加入到 Node.js 开发者的阵营中来。CoffeeScript 的出现更是让不少 Ruby 和 Python 开发者找到了学习的理由。期间一大波以 Node.js 作为运行环境的 CLI 工具涌现,其中不乏有用于加速前端开发的优秀工具,如 less, UglifyJS, browserify, grunt 等等。Node.js 的发展势如破竹。
  4. 更迭期:经过了一大批一线工程师的探索实践后,Node.js 也开始进入了时代的更迭期,新模式代替旧模式,新技术代替旧技术,好实践代替旧实践。ES6 也开始出现在 Node.js 世界中。
  5. 分裂期:ES6 的发展越来越明显,v8 也对 ES6 中的部分特性实现了支持,如 Generator 等等,利用 --harmony 作为开启阀门。后来,诞生了 Io.js 分支,再后来也回到了 Node.js 主线上。
  6. 飞速发展期:随著 ES2015 的发展和最终定稿,一大批利用 ES2015 特性开发的新模块出现,如原 express 核心团队所开发的 koa

Node.js 适合做那些场景的开发?

Node.js 可以说是一种轻量的、可模块化的开发工具,就目前而言,它适合作为以下场景的开发工具:

  1. Web 后端服务
  2. Web API 服务
  3. CLI 工具开发
  4. 简易的 Native 应用开发

Node.js Web 应用的运维部署

Node.js 的运维部署一直处在一个演变的进行时,从一开始的 nohup 原生命令,到利用 supervisor 工具,后来出现了 foreverpm2,还有以 Nginx 插件存在的 Passion Passenger

Node.js 的运维压力

Node.js 与 Go、Java 等语言不同的是,JavaScript 是一门解析型语言,任何非语法上的错误在默认情况下都不会在被运行之前抛出,这就导致了 Node.js 的进程对于错误来说是脆弱的。所以我们需要一些“保姆进程”来保证进程的存活。

而且 Node.js 的环境部署虽然较几年前已经简单了非常多,但是依然是需要数次的等待。

有更好的办法吗?

当然有!Node.js 官方已经提供了 Node.js Docker 镜像,你可以直接从 DaoCloud 的镜像仓库中获取。

这里奉上使用 DaoCloud 构建 Node.js 应用的实例:DaoCloud Node.js Example