nodejs有三个特性:1、服务器端;Nodejs运行在服务器端,为Javascript提供运行环境的环境服务。2、非阻塞异步;Nodejs采用了非阻塞型I/O机制,在做I/O操作的时候不会造成任何的阻塞。3、事件驱动;当进来一个新的请求的时,请求将会被压入一个事件队列中,然后通过一个循环来检测队列中的事件状态变化,如果检测到有状态变化的事件,那么就执行该事件对应的处理代码。
本教程操作环境:windows7系统、nodejs16版,DELL G3电脑。
什么是 Node.js?
Node.js 是一个开源与跨平台的 JavaScript 运行时环境,或者说,是一个平台。
在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能。
可以理解为 Node.js 就是一个服务器端的、非阻塞式I/O的、事件驱动的 JavaScript运行环境。
就如上述描述,不难得出,Node.js 有三个特性 : 服务器端、 非阻塞式I/O、事件驱动。接下来,我们就三个特性进行剖析:
-
① 服务器端:字面意思,Node.js 运行在服务器端,为 Javascript提供运行环境的环境服务。
-
② 非阻塞异步: Node.js 采用了非阻塞型 I/O 机制,在做 I/O 操作的时候不会造成任何的阻塞,当完成之后,以时间的形式通知执行操作。
例如在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。
-
③ 事件驱动: 事件驱动就是当进来一个新的请求的时,请求将会被压入一个事件队列中,然后通过一个循环来检测队列中的事件状态变化,如果检测到有状态变化的事件,那么就执行该事件对应的处理代码,一般都是回调函数
比如读取一个文件,文件读取完毕后,就会触发对应的状态,然后通过对应的回调函数来进行处理
知识拓展:
node.js 是 一个单线程服务(JS本来无论在浏览器端还是服务端都是单线程)。同时,拥有世界最大的开源库生态系统: npm。
Node.js 有哪些优缺点?
> 优点
-
处理高并发场景性能更佳
-
适合I/O密集型应用,值的是应用在运行极限时,CPU占用率仍然比较低,大部分时间是在做 I/O硬盘内存读写操作
> 缺点
因为 Node.js 是单线程,带来的缺点有:
-
不适合CPU密集型应用
-
只支持单核CPU,不能充分利用CPU
-
可靠性低,一旦代码某个环节崩溃,整个系统都崩溃。
Node.js 能做什么?
- 提供数据给浏览器展示
- 保存用户提交过来的数据
-
数据统计与分析
Node.js 的 模块系统
在 Node.js
中没有全局作用域的概念;
在 Node.js
中,只能通过 require
方法来加载执行多个 JavaScript
脚本文件;require
加载只能是执行其中的代码,文件与文件之间由于是模块作用域,所以不会有污染的问题;
-
模块完全是封闭的
-
外部无法访问内部
-
内部也无法访问外部
模块作用域虽然可以带来了一些好处,可以加载执行多个文件,可以完全避免变量命名冲突污染的问题。
但是某些情况下,模块与模块是需要进行通信的。在每个模块中,都提供了一个对象:‘exports
’,该对象默认是一个空对象。
在使用过程中,需要被外部访问使用的成员手动的挂载到 ’exports
‘ 接口对象中,
然后谁来 ’require
‘ 这个模块,谁就可以得到模块内部的 exports
接口对象。
核心模块
核心模块是由 Node 提供的一个个的具名的模块,它们都有自己特殊的名称标识,例如:
-
fs
:文件操作模块 -
http
:网络服务构建模块 -
os
:操作系统信息模块 -
path
:路径处理模块
所有核心模块在使用的时候都必须手动的先使用 require
方法来加载,然后才可以使用,例如: ‘var fs = require('fs')’
Node.js 应用场景
借助Nodejs的特点和弊端,其应用场景分类如下:
-
善于
I/O
,不善于计算。因为Nodejs是一个单线程,如果计算(同步)太多,则会阻塞这个线程; -
大量并发的
I/O
,应用程序内部并不需要进行非常复杂的处理; -
与
websocket
配合,开发长连接的实时交互应用程序
,即:实时通讯 ;
具体场景可以表现为如下:
① 用户表单收集系统、后台管理系统、实时交互系统、考试系统、联网软件、高并发量的web应用程序;
② 基于web、canvas
等多人联网游戏;
③ 基于 web
的多人实时聊天客户端、聊天室、图文直播;
④ 单页面浏览器应用程序;
⑤操作数据库、为前端和移动端提供基于json的API;
其实,Node.js
能实现几乎一切的应用,只不过需要考虑的是 当前场景是否适合使用 Node.js, 使用 Node.js 是否 ” 最优解 “,需要考虑 性能问题。