[NodeJS] Node.js 与 V8 的故事

要说Node.js的历史,就不得不说说V8历史。在此以前咱们先一句话描述一下什么是Node.js:Node.js是一个基于Google Chrome V8 Javascript引擎之上的平台,用以建立轻量级、快速、可扩展、事件驱动和非阻塞I/O的应用。如今咱们来讲说Node.js的源头——V8 javascript引擎。javascript

 

V8是Google主导的一个开源项目,它是Chrome浏览器的核心。它首次公开发布是在2008年9月2日,这天也是Chrome浏览器的首个版本发布。它是浏览器性能的一次飞跃,它将浏览器技术推向了一个全新的高度。它使用C++写成,它革命性的创举是将Javascript源码预编译为机器码,而不是像之前那样将Javascript翻译为字节码,而后在运行时使用JIT动态执行代码。java

 

2009年左右,Ryan Dahl正努力解决一个棘手的问题——让浏览器知道完成剩余的上传进度所须要的时间。受到Ruby的Mongrel webserver和刚刚发布的Chrome和V8的启发,他决定试试javascript,很快这个小想法变成了Node.js。node

 

Node.js项目开发获得Joyent资助,这也是Ryan工做的公司。今天他仍然在这家公司工做,但在2012年1月30日他将守护者的位置转交给了Issac Schlueter。web

 

若是你想了解更多详情关于Ryan Dahl和他如何以及为何决定发明Node.js,点击查看他本人的相关自述视频npm

 

一直以来,Javascript所处的浏览器环境被限制为单进程/单线程,这使得它不能同时更新DOM和执行其余业务逻辑,V8也是如此。那么,为何还有人会想要在服务器端使用如此受限和低性能的东西?浏览器

 

Javascript也许不是计算能力最好的语言,可是它事件驱动的非阻塞设计,让Node.js成为一个轻量级(在RaspberryPI运行毫无压力)且性能良好的web平台,变成老的JEE Java平台、PHP和Ruby的直接竞争对象。服务器

 

从开发者的角度看,Node.js社区的创新数量使人称奇,其中做为Node.js开发者必须知道的三大工具之一的NPM贡献良多,但这就是另一个故事了。工具

 

Node.js由Ryan Dahl在2009年进行研发,它的发展和维护获得Joyent公司资助。Dahl在看到Flickr的上传文件进度条时萌发了研发Node.js的想法。因为浏览器不知道已经上传了多少文件,因此不得不向服务器发起请求查询。Dahl想到了一个更简单的方法。Ruby的Mongrel web server是Dahl的一个灵感来源。

Node.js受到其余一些模式的影响,例如Ruby On Rails的Event Machine,Python的Twisted。在这些模式基础之上,Node.js提供的事件循环(event loop)使之再也不像先前那些模式同样只是一个类库,而成为一种语言。与传统使用阻塞调用的模式不一样,Node.js没有循环事件所使用的调用,而是自己执行完脚本直接进入循环。这也是javascript的运行方式。

最初Dahl经历了几个失败的项目,这几个项目分别由C、Lua和Haskell写成的,但当谷歌发布V8引擎后,Dahl开始尝试Javascript。

尽管他最初的想法是非阻塞,可是他在模块系统和一些其余地方并无遵循非阻塞,由于非阻塞致使加载外部类库时有问题。


Node.js由Dahl在2011年发布,但只能在Linux运行。npm做为Node.js的包管理工具在同年发布。

在2011年6月,微软与Joyent合做帮助开发了原生的Windows版本的Node.js。同年7月,第一个Windows版本Node.js发布。


2012年1月30日,Dahl将守护者位置让给他的同事,也是npm创始人Issac Schlueter。Dahl在Google groups中写道:

  “如今,基于libuv的重写工做已大部分完成,我将把个人守护者位置让与Issac Schlueter。在接下来的数月里,咱们的精力将转移到关于第三方模块系统体验(其中包括一个查阅全部第三方模块的网站),一个新的插件构建系统,在npm增长二进制安装包。Issac将担任维系内核与外部模块关系并使之具备良好体验的角色,也是惟一具备这种维系能力的角色。通过三年对Node的开发,这使我能够空出来作一些项目研究工做。我仍然为Joyent工做,并从旁提供建议,但我再也不进行日复一日的Bug修复工做。Issac具备让Node发布新版本的话语权。他将直接负责新特性诉求、更改和bug修复。”

2014年1月15日,Schlueter宣布他将把npm做为他的工做重心,Timothy J Fontaine将成为项目负责人。Issac在Node.js博客中写道:
  “通过去年一年,TJ Fontaine已经变成Node.js项目的绝对核心。他一直从事构建新版本,管理测试工做,修复烦人的bug,始终关注使用者的需求并做出最后决定。……任何接触到项目的核心工做的人都知道他已经做为事实上负责项目有一段时间了,所以咱们决定将它变成正式的。这个决定即时生效,TJ Fontaine成为Node.js项目负责人。我将还是Node.js的核心开发者,并期待继续以这个角色为项目做出本身的贡献。不管如何,我工做重心将是npm。”

次日,2014年1月16日,Timothy J Fontaine回帖简要说明了之后的发展道路,还有bug修复,性能平衡,与V8引擎保持同步更新以及工具。

 

Ref:oop

NODE.JS AND V8 HISTORY性能

Wiki Node.js

相关文章
相关标签/搜索