购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 Node.js简介

1.1.1 什么是Node.js

视频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、事件驱动式的程序设计模式。

1.1.2 Node.js发展历史

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时代。

1.1.3 Node.js特点及应用场景

1.强大的标准类库

Node.js最大的特性是它的标准类库,主要由二进制类库和核心模块两部分组成。二进制类库包括Libuv,它为网络和文件系统提供了快速的时间轮循和非阻塞l/O,同时拥有HTTP类库,可以快速构建HTTP客户端和服务器。Node.js的核心模块主要由JavaScript编写,方便用户在需要时阅读源码。

2.灵活的包管理器

Node.js有着强大而灵活的包管理器(Node Package Manager,NPM),目前已经有上万个第三方模块,其中有网站开发框架,以及MySQL、PostgreSQL、MongoDB等数据库接口,有模板语言解析、CSS 生成工具、邮件、加密、图形、调试支持,甚至还有图形用户界面和操作系统APl工具。

3.内置HTTP服务器

Node.js可以作为服务器向用户提供服务,与PHP、Python、Ruby on Rails相比,它跳过了Apache、Nginx等HTTP服务器,直接面向前端开发。Node.js的许多设计理念与经典架构(如LAMP)有很大的不同,它能提供强大的伸缩能力。

4.异步式I/O与事件驱动架构设计

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)多客户端的通信。

1.1.4 Node.js与JavaScript的区别

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事实上既是一个运行时环境,又是一个库。 lFRFwkHkV+MURpe3Hl3jmKISUJkd9xvjrec5z9+Onvp1vUz0DtNq2+hciVwizetC

点击中间区域
呼出菜单
上一章
目录
下一章
×