NODE.JS 与 V8 的故事

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

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

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

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

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

一直以来,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:

NODE.JS AND V8
HISTORY

Wiki Node.js

NODE.JS 与 V8 的故事,布布扣,bubuko.com

时间: 2024-08-08 14:43:32

NODE.JS 与 V8 的故事的相关文章

准备:新V8即将到来,Node.js的性能正在改变

V8的Turbofan的性能特点将如何对我们优化的方式产生影响 审阅:来自V8团队的Franziska Hinkelmann和Benedikt Meurer. **更新:Node.js 8.3.0已经发布了V8 6.0和Turbofan. Node.js依靠V8 JavaScript引擎来运行代码,其语言本身也是我们熟悉和喜爱的.V8 JavaScript引擎是Google为Chrome浏览器编写的JavaScript虚拟机.从一开始,V8的一个主要目标是让JavaScript运行地更快,或者至

Node.js源码解析----自己实现一个Node.js的难点与思路

前言: 最近在看Node.js,看了一段时间后便想着自己实现一个Node.js现在已经实现了个大概(绝大部分是模仿人家,不过自己实现一遍基本上就理解Node.js的原理了)下面便说说这个过程中的坑,以及一些需要注意的地方: Node.js需要一定C++基础,建议看完C++Primer再看,否则V8的好多表达方式,指针,引用,模板之类的会看不懂: 代码已上传GitHub地址:   https://github.com/sven36/cNode 编译:我用的win10的环境,具体编译请参考Node.

node.js(一)介绍与安装

开始node.js的学习之路.我是一个node菜鸟,总结自己的学习过程,和大家一起学习,有什么不对的地方,还请指正! 1.为什么使用node.js? node.js的首要目标是提供一种简单.用于创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具.node.js的优势在于实现里高性能服务器,采用非阻塞型I/O及事件环机制.严格地讲,node.js是一个用于开发各种web服务器的开发工具.在node.js服务器中,运行的是高性能V8 javascript脚本语言,该语言是一种可以运行在服务

Node.js开发入门—HTTP文件服务器

HelloWorld示例只有演示意义,这次我们来搞一个实际的例子:文件服务器.我们使用Node.js创建一个HTTP协议的文件服务器,你可以使用浏览器或其它下载工具到文件服务器上下载文件. 用Node.js实现的HTTP文件服务器,比我在Qt网络编程实战之HTTP服务器视频课程里用Qt实现的版本,复杂度要小太多太多了. 为了读取文件,我们会用到File System模块(名字是"fs"),Stream,我们还要分析URL,区别HTTP方法,还会用到EventEmitter. 文件服务器

node.js之内存机制特性

Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB:V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一定的条件就可以晋升为老生代.如下图所示: 图一  Node.JS堆内存结构 Node.JS能够高效利用内存,它在JavaScript中作用域分为:函数作用域.with作用域.全局作用域.标示符查找会先从当前作用域,若没有找到将会向上级的作用域里查找.查看进程内存使用情况:process.memory

【读书笔记】《Node.js入门经典》

Node.js学习笔记 Nodejs学习笔记 Nodejs介绍 npmNode Package Manager 1 npm常用命令 IO的不可预测性 回调 1 回调剖析 2 Node在读写文件使用回调 3 Node在HTTP使用回调 4 回调顺序 5 同步与异步代码 HTTP 1 HTTP响应状态代码 2 使用URL模块响应不同的请求 3 使用Nodejs创建HTTP客户端 4 将函数发布为URL服务提供客户端接口 5 两个js文件相互调用函数 数据持久化 1 将数据写入文件 2 读取环境变量

Node.js背后的V8引擎优化技术

Node.js的执行速度远超Ruby.Python等脚本语言,这背后都是V8引擎的功劳.本文将介绍如何编写高性能Node.js代码.V8是Chrome背后的JavaScript引擎,因此本文的相关优化经验也适用于基于Chrome浏览器的JavaScript引擎. V8优化技术概述 V8引擎在虚拟机与语言性能优化上做了很多工作.不过按照Lars Bak的说法,所有这些优化技术都不是他们创造的,只是在前人的基础上做的改进. 隐藏类(Hidden Class) 为了减少JavaScript中访问属性所

新 V8 即将推出和 Node.js

Node.js 就依赖于 V8 引擎, V8 引擎是由 Google 为 Chrome 浏览器编写的 JavaScript 虚拟机.从一开始,V8 的主要目标就是使 JavaScript 运行更加快速,或至少比竞争对手快.对于高度动态这并不容易.这部分是关于 V8 和 JS 引擎性能的演变. V8 引擎的核心部分是能够高速执行 JavaScript 的 JIT(Just In Time)编译器.这是一个动态编译器,可以在运行时优化代码.当 V8 最初构建时,JIT 编译器被称为 FullCode

1.node.js windows环境搭建

作为服务端运行javascript的平台的NodeJs,把前台javascript移到了服务器端,Google V8引擎使其运行效率非常高,它可以异步,无任何阻塞运行程序.nodejs包含http服务器,可以为我们实现 web系统设计,客户端javascript编译器,等一系列的功能. 工具/原料 windows系统电脑 ,电脑可以上网 方法/步骤 下载windows平台nodejs环境安装包,百度一下nodejs官网,找到DOWNLOADS点击,找到Windows Installer 如果为6