代码改变世界

nodejs

2016-05-15 18:54  小杨哥  阅读(154)  评论(0编辑  收藏  举报

Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。

V8引擎执行Javascript的速度非常快,性能非常好。

Node是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。

 

基本信息

  • 外文名

    Node.js

  • 类别

    JavaScript工具包

 
  • 发布时间

    2009年5月

  • 开发者

    RyanDah

折叠编辑本段基本介绍

Node.js是一个Javascript运行环境(runtime)。实际上它是对GoogleV8引擎(应用于Google Chrome浏览器)进行了封装。[1]

V8引 擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。

例如,在服务器环境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此,V8.Node增加了Buffer类,方便并且高效地 处理二进制数据。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各环境下更加给力。

(概述内容来源:[2]图片来源:)

其中环境变量是有Gaolong日夜完成!

折叠编辑本段发展历史

2009年2月,Ryan Dahl在博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一套库。

2009年5月,Ryan Dahl在GitHub上发布了最初版本的部分Node.js包,随后几个月里,有人开始使用Node.js开发应用。

2009年11月和2010年4月,两届JSConf大会都安排了Node.js的讲座。

2010年年底,Node.js获得云计算服务商Joyent(Joyent[3]是美国一家软件和服务提供商,该公司专门从事应用程序虚拟化和云计算)资助,创始人Ryan Dahl加入Joyent全职负责Node.js的发展。

2011年7月,Node.js在微软的支持下发布Windows版本。

折叠编辑本段特性简介

V8引擎本身使用了一些最新的编译技术。这使得用Javascript这类脚本语言编写出来的代码与用C这类高级语言写出来的代码性能相差无几,却节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务器。Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂 度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。

Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。

虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制了我们选择编程语言的自由。任 何服务器与日益复杂的浏览器客户端应用程序间共享代码的愿望只能通过Javascript来实现。虽然还存在其他一些支持Javascript在服务器端 运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。

在Node启动的很短时间内,社区就已经贡献了大量的扩展库(模块)。其中很多是连接数据库或是其他软件的驱动,但还有很多是凭他们的实力制作出来的非常有用的软件。

最后,不得不提到的是Node社区。虽然Node项目还非常年轻,但很少看到对一个项目如此狂热的社区。不管是新手,还是专家,大家都围绕着项目,使用并贡献自己的能力,致力于打造一个探索、支持、分享、听取建议的乐土。

折叠编辑本段模块介绍

Node.js使用Module模块去划分不同的功能,以简化应用的开发。Modules模块有点象C语言中的类库。每一个Node.js的类库都包含了十分丰富的各类函数,比如http模块就包含了和http功能相关的很多函数,可以帮助开发者很容易地对比如http,tcp/udp等进行操作,还可以很容易的创建http和tcp/udp的服务器。

要在程序中使用模块是十分方便的,只需要如下:

在这里,引入了http类库,并且对http类库的引用存放在http变量中了。这个时候,node.js会在我们应用中搜索是否存在node_modules的目录,并且搜索这个目录中是否存在http的模块。如果node.js找不到这个目录,则会到全局模块缓存中去寻找,用户可以通过相对或者绝对路径,制定模块的位置,比如:

var myModule = require('./myModule.js');

模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。当然,可以将某些方法和变量暴露到模块外,这个时候可以使用export是对象去实现。

折叠编辑本段安装方法

Node.js的安装

下面介绍下Node.js的安装,首先在nodejs  org的网站上根据操作系统下载相关的安装包,对于linux下的安装,可以如下进行:

sudo apt-get update

sudo apt-get install node

或者:

sudo aptitude update

sudo aptitude install node

Node.js就会在sid库,现在可以将它们增加到sources来源列表中

sudo echo deb http://ftp.us.debian org/debian/ sid main > /etc/apt/sources.list.d/sid.list

但要注意的是,在完成安装后,需要移走/etc/apt/sources.list.d/sid.list。[4]

折叠编辑本段集成开发环境

具备书写javascript的IDE均可.普通的记事本也可以进行开发

折叠编辑本段示例程序​

任何一套标准都由一个著名的程序开始:Hello World !在Node中,Http是首要的。Node为创建http服务器作了优化,所以你在网上看到的大部分示例和库都是集中在web上(http框架、模板库等)。以下做了一个nodejs的Hello World 演示:

1

2

3

4

5

6

7

varhttp = require('http');

server = http.createServer(function(req, res) {

res.writeHeader(200, {"Content-Type": "text/plain"});

res.end("Hello World\n");

});

server.listen(8000);

console.log("httpd start @8000");

折叠编辑本段版本发布

2015年02月06日,Node.js 0.12.0 发布。[5]

2013年09月30日,Node.js 0.10.20 发布。

改进处:

  • tls: 修复偶尔发生的挂起和部分显示 (Fedor Indutny) - 修复 "npm ERR! cb() never called!"

2013年09月24日,Node.js 0.10.19 发布。

改进处:

  • uv: 升级至 v0.10.17
  • npm: 升级至 1.3.11
  • readline: 从控制字符开始处理输入 (Eric Schrock)
  • configure: 新增 mips-float-abi (soft, hard) 选项 (Andrei Sedoi)
  • stream: 对象模式改为允许否值 (isaacs)
  • tls: 阻止读取返回冗余的值 (Nathan Rajlich)
  • tls: NPN 协议改为连接到本地 (Fedor Indutny)

2013年09月04日,Node.js 0.10.18 发布。

改进处:

  • uv: 升级至 v0.10.15
  • stream: 不阻塞 unset _events 属性 (isaacs)
  • stream: 传递的 'buffer' 用可解码的方式进行编码 (isaacs)

2013年08月21日,Node.js 0.10.17 发布。

改进处:

  • uv: 升级至 v0.10.14
  • http_parser: 不接收 PUN/GEM 方法作为 PUT/GET (Chris Dickinson)
  • tls: 修复当读取的 ssl 被销毁时的声明 (Fedor Indutny)
  • stream: 当监听器被移除时抛出 'error' (isaacs)
  • dgram: 修复错误的 send() 的参数的声明 (Ben Noordhuis)
  • readline: 在退出终端原始模式前暂停 stdin (Daniel Chatfield)

2013年08月16日,Node.js 0.10.16 发布。

改进处:

  • v8: 修复 CVE-2013-2882 的后门
  • npm: 升级至 1.3.8
  • crypto: 修复 assert() 的十六进制数据输入 (Ben Noordhuis)
  • crypto: 修复 randomBytes() 错误路径的内存泄漏 (Ben Noordhuis)
  • events: 修复内存泄漏,不暴露事件名称 (Ben Noordhuis)
  • http: 正确处理 hex/base64 编码 (isaacs)
  • http: 提升 res.write(buf) 性能 (Ben Noordhuis)
  • stream: 修复双管道错误显示 (Eran Hammer)