
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/树O 的模型。
Node 是一个让 JavaScript 运行在服务来自端的开发平台,它让 JavaScript 成企北象误有为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。 发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进析方板自群则烈洲行了封装。
Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行360百科得更好。V8引擎执行Javascript的速度非常快,性能非常好。 Node是一个基于Chrome Ja觉使答vaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 治直识尽胜既适磁乱使用事件驱动, 非阻塞I/O 模型而得以轻量和情欢高效,非常适合在分布式设备上运行数据密集型的实时应用。
- 外文名 Node
- 类别 运行于服务端的JavaScript解释器
- 发布时间 2009年5月
- 开发者 Ryan Dahl
发展史
- 来自2009年2月,Ryan Dahl在博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一套库求到春。
- 2009年5月,Ryan D360百科ahl在GitHub上发布了最初版本的部分Node包,随后几个月里,有人开始使用Node开发应用。
- 2009年11月和2010年4月,两届JSConf大会都齐频括安排了Node.js的讲座。
- 2010年年底,Node获得云计算服务商Joyent资八福检贵停脸业染古成助,创始人Ryan Dahl加入Joyent全职负责Node的发展。
- 2011年7月,Node在微软的支持下发布Windows版本。
特性
V8引擎本身使用了一些最新的编译技术。这使得用Javascript这类脚本语言编写出来的代码运行速度获得了极大提升,又节省了开发成本。对性能的苛求是Node的一个关余审调建尽防特刚衣培键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务能土器。Node采用了一个称为"事假说室告输甲区念顶件循环(event loop)"的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过得买即督露了这些,但仍提供很好的性能。
Node采用一系列"非积氢距洋难费苏变阻塞"库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易燃念宜露懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。
虽然让Javascript运行于服务器端不是促感认步哥尽最节料Node的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制妒根双价集病啊久了我们选择编程语言的自由。任何服务器与日益复杂的浏览器客户端应用程序间共享代异局升满也念布码的愿望只能通过Ja销上推沿打盐太vascript来古乙实现。虽然还存在其他一些支持Javascript在服务器端 运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。
在N组范务与ode启动的很短时间内,社区就已经贡献了大量的扩展库(模块)。其中很多是连接数据库或是其他软件的驱动,但还有很多是凭他们的实力制作出来的非常有用的软件。
最后,不得不提到的是Node社区。虽然Node项乙最是目还非常年轻,但很少看到对一个项目如此狂热的社区。不管素期刚美是新手,还是专家,大家都围绕着项目,使用并贡献自己的能力,致力于打造一个探索、支持、分享、听取建议的乐土。
Node的优点
Node作为一个新兴的前端框架,后台语言,有很多吸引人的地方:
RESTful AP超亚I
单线程
Node可以在不新增额外线程的情况下,依然可以对任务进行并发处理 -- Node.js是单线程的。它通过事件循环(event loop)来实现并发操作,对此,我们应该要充分利用这一点 -- 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作。
非阻塞IO
V8虚拟机
事件驱动
模块
Node使用Module模块去划分不同的功来自能,以简化应用的开发。Modules模块有点像C++语言中的类库。每一个Node的类库都包含了十分丰富的各类函数,且守真育论极看旧知比如http模块就包360百科含了和http功能相关的很多函数,可以帮助开发者很容易地对比如http,tcp/udp等进行操作,还可以很容易的创建http和tcp/udp的服务器。
要在程序中使用模块是十分方便的,只需要如下:
在这里,引入了http类库,并且对http类库的引用存放在http变息际步量中了。这个时候,Node会在我们应用中搜索是否存在node_modules的目录,并且搜索这个目录中是否存在http的模块。如果Node.js找不到这个目录,则会到全局模费来环领米副例副包测块缓存中去寻找,用户可以通督货跟冷销束铁过相对或者绝对路径,指定模块的位置,比如:
var myModule = require('./myModule.js');
模块中包含了很多功能代码胜从背室经型府都片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,胶段都只能在同一个模块中被调用。当然,可以将某些方法和与尽敌四洲怕阳队们时变变量暴露到模块外,这个时候可以使用exports对象去实现。
安装
Linux下安装Node
下面介绍下Nod线e的安装,首先在nodejs的网站上根据操作系统下载相关的安装包,对于Ubuntu (linux)下的安装,可以如下进行:
sudo apt-get update
sudo apt-get 封华乱侵点普功训确论install nod木功影洋认也罗责查袁e
或者:
sudo apt update
sudo apt install node
Windows下安装No验对散呢留de
官网现已难三提供安装包(最新的长期胞支持版本: 10.16.0)、承装庆利他联永调编译器和相应的API 文档(English)。
集成开发环境
游远市确吧层预愿若草 具备书写JavaScript的IDE均可。普通的记事本也可以进行开发。
应用方向
在几年的时间里,Node.JS逐渐发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用Node.JS进行开发,此外,开发人员还可以使考空矛适用它来开发一些快速移策九派他军积散动Web框架。
除了Web应用外,NodeJS也被应用在许多方面,本文盘点了NodeJS在其它方面所开发的十大令人神奇的项目,这些项目涉及到应用程序监控、媒体流、远程控制、桌面和移动应用等等。
示拿束该获终例程序
任何一套标准都由一个著名的程序开始:Hello World !在Node中,Http是首要的。Node为创建http服务器做了优化,所以你在网上看到的大部分示例和库都是集中在web上(http框架、模板库等)。以下做了一个nodejs的Hello World 演示 :
var app = express()
app.get('/',(req,res)=>{res.end("hello world")})
事务处理示例
本示例意图向读者传递 Node.js 关于 HTTP 处理过程的详实概念。在不考虑编程语言和环境的情况下,我们假设您已经知晓通常情况下 HTTP 请求是如何工作的,并且对 Node.js 的 EventEmitters 和 Streams 也已知晓。如果您对他们并不熟悉,通过 API 文档可以快速查阅。
创建服务
Node 的网络应用都需要先创建一个网络服务对象,这里我们通过 createServer 来实现。
传入 createServer 的 function 在每次 HTTP 请求时都将被调用执行,因此这个 function 也被称为请求的处理者。事实上通过 createServer 返回的 Server 对象是一个 EventEmitter,我们需要做的仅仅是在这里保存这个 server 对象,并在之后对其添加监听器。
当 HTTP 请求这个服务时,node 调用请求处理者 function 并传入一些用于处理事务相关的对象:request 和 response。我们可以非常方便的获得这两个对象。
为了对实际的请求提供服务,在 server 对象上需要调用 listen 方法。绝大多数情况你需要传入 listen 你想要服务监听的端口号,这里也存在很多其他的可选方案,参见 API reference。
评论留言