视频1
Node.js是一个真正高效的Web开发平台。在Node.js诞生之前,在服务端运行JavaScript是一件不可思议的事情,并且对其他的脚本语言来说,要实现非阻塞l/O通常需要依赖特殊的类库。但是Node.js的出现改变了这一切。
Node.js是一个可以让JavaScript运行在服务器端的平台,是JavaScript语言的服务器运行环境。Node.js内部采用Google公司的V8引擎作为JavaScript语言解释器,通过自行开发的Libuv库来调用操作系统资源。Node.js对Google V8引擎进行了封装,V8引擎执行JavaScript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的APl,使得V8在非浏览器环境下运行得更好。
Node.js是基于Chrome JavaScript运行时建立的平台,是一个为实时Web应用开发而诞生的平台,用于方便地搭建响应速度快、易于扩展的网络应用。它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步l/O、事件驱动式的程序设计模式。
Node.js是一个非常新兴的开发工具,它诞生于2009年,其历史不如Python、Ruby、PHP等久远,但是它是有史以来发展最快的开发工具之一。Node.js的版本演化历史如下。
2009年,瑞安·达尔(Ryan Dahl)在GitHub上发布Node.js的最初版本。
2010年1月,Node.js包管理器(NPM)诞生。2010年3月Express.js问世。
2011年7月,Node.js在微软(Microsoft)的赞助下发布了Windows版本。
2012年6月,Node.js V0.8.0稳定版发布。
2013年12月,著名的Koa框架发布。
2014年12月,Fedor lndutny制作了分支版本,并命名为“io.js”。
2015年初,Node.js基金会成立。
2015年9月,Node.js和io.js合并,Node.js 4.0发布。
2016年,Node.js 6.0发布。
2017年,Node.js 8.0发布。
2018年,Node.js 8.x时代落幕,进入Node.js 10.x时代。
2019年,Node.js增强了实验性的ES Module支持,并伴随着V8引擎版本升级以及ES 特性支持,进入Node.js 12.x时代。
Node.js最大的特性是它的标准类库,主要由二进制类库和核心模块两部分组成。二进制类库包括Libuv,它为网络和文件系统提供了快速的时间轮循和非阻塞l/O,同时拥有HTTP类库,可以快速构建HTTP客户端和服务器。Node.js的核心模块主要由JavaScript编写,方便用户在需要时阅读源码。
Node.js有着强大而灵活的包管理器(Node Package Manager,NPM),目前已经有上万个第三方模块,其中有网站开发框架,以及MySQL、PostgreSQL、MongoDB等数据库接口,有模板语言解析、CSS 生成工具、邮件、加密、图形、调试支持,甚至还有图形用户界面和操作系统APl工具。
Node.js可以作为服务器向用户提供服务,与PHP、Python、Ruby on Rails相比,它跳过了Apache、Nginx等HTTP服务器,直接面向前端开发。Node.js的许多设计理念与经典架构(如LAMP)有很大的不同,它能提供强大的伸缩能力。
Node.js最大的特点就是采用异步l/O与事件驱动的架构设计。传统的高并发架构方案通常是多线程模式,而 Node.js 使用的是单线程模型,在执行过程中只启动一个线程来运行代码,即Node.js进程在同一时刻只会处理一个事件,程序在执行时进入事件循环等待下一个事件到来,每个异步式l/O请求完成后会被推送到事件队列,等待程序进程进行处理。每当遇到耗时的l/O操作,比如文件读写、网络请求,则将耗时操作丢给底层的事件循环去执行,无须等待即可继续执行下面的代码。当底层的事件循环执行完耗时的l/O时,会执行回调函数来作为通知。这样做的好处是:CPU和内存在同一时间集中处理一件事,同时尽可能并行执行耗时的l/O操作。
基于以上特性,Node.js适合开发下列应用。
(1)Web服务APl。
(2)实时多人游戏。
(3)后端的Web服务。
(4)基于Web的应用。
(5)多客户端的通信。
Node.js 与 JavaScript的相同点是两者都使用了 JavaScript语言来开发。浏览器端的JavaScript受制于浏览器提供的接口,比如浏览器提供弹出对话框的APl,则前端JavaScript语言就能实现弹出对话框的功能。出于安全考虑,浏览器对文件操作、网络操作、操作系统交互等功能有严格的限制,所以在浏览器端的JavaScript功能受限。
Node.js完全没有浏览器端的限制,使JavaScript拥有了文件操作、网络操作、进程操作等功能,和Java、Python、PHP等语言无实质区别,而且由于底层使用性能超高的V8引擎来解析执行,加上支持异步l/O机制,因此,这使编写高性能的Web服务器变得轻而易举。
Node.js允许在后端(脱离浏览器环境)运行JavaScript代码。Node.js使用Google的V8引擎来解释和执行JavaScript代码。此外,Node.js的许多模块可以简化重复开发。因此,Node.js事实上既是一个运行时环境,又是一个库。