概念
是一个基于Chrome V8引擎的JavaScript运行环境,让JavaScript 运行在服务端的开发平台。Node. js是一个事件驱动、非阻塞式I/O的模型,轻量而又高效。浏览器是js的前端运行环境
node.js是js的后端运行环境。
优缺点
优点
处理高并发场景性能更佳
适合I/O密集型应用,指的是应用在运行极限时,CPU占用率仍然比较低,大部分时间是在做 I/O硬盘内存读写操作
缺点
不适合CPU密集型应用(如复杂的数学计算)
只支持单核CPU,不能充分利用CPU
可靠性低,一旦代码某个环节崩溃,整个系统都崩溃
适用场景
高并发、实时聊天、实时消息推送、客户端逻辑强大的SPA(单页面应用程序)。
应用场景
第一大类:用户表单收集系统、后台管理系统、实时交互系统、考试系统、联网软件、高并发量的web应用程序
第二大类:基于web、canvas等多人联网游戏
第三大类:基于web的多人实时聊天客户端、聊天室、图文直播
第四大类:单页面浏览器应用程序
第五大类:操作数据库、为前端和移动端提供基于json的API
node与Javascript的区别
为什么要用Node.js
(1)简单, Node. js用 JavaScript、JSON进行编码,简单好学。
(2)功能强大,非阻塞式I/O,在较慢的网络环境中,可以分块传输数据,事件驱动,擅长高并发访问。
(3)轻量级, Node. js本身既是代码又是服务器,前后端使用同一语言。
(4)可扩展,可以轻松应对多实例、多服务器架构,同时有海量的第三方应用组件。
- 非阻塞I/O是指以异步来执行函数,先执行同步任务,耗时任务放在事件队列中,以此轮询执行
- 高并发是指许多用户同时访问相同 API接口或 URL地址。这种情况常常发生在活跃用户数量大、用户聚集程度高的业务场景中。
Node. js 有哪些全局对象?
在浏览器 JavaScript 中,通常window 是全局对象, 而 Nodejs中的全局对象是 global,global全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值
全局对象分类
1.真正的全局对象
Buffer
可以处理二进制以及非Unicode编码的数据
process
进程对象,提供有关当前进程的信息和控制
console
最常用的输入内容的方式:console.log/console. info、console.error/console.warning、console.time/console.timeEnd 、console.trace、console .table。
clearInterval、setInterval
设置定时器与清除定时器
clearTimeout、setTimeout
设置延时器与清除延时器
global
全局命名空间对象,process、console、setTimeout等都有放到global中
2.模块级别的全局变量
__dirname
获取当前文件所在的路径,不包括后面的文件名
__filename
获取当前文件所在的路径和文件名称,包括后面的文件名称
exports
module.exports 用于指定一个模块所导出的内容,即可以通过 require() 访问的内容
module
对当前模块的引用,通过module.exports 用于指定一个模块所导出的内容,即可以通过 require() 访问的内容
require
用于引入模块、 JSON、或本地文件。 可以从 node_modules 引入模块。
Node.js核心模块
EventEmitter 、Stream、FS、Net和全局对象等。
对 Node.js 中的 process 的理解?有哪些常用方法
概念
process 对象是一个全局变量,提供了有关当前 Node.js进程的信息并对其进行控制
属性
process.env:环境变量,例如通过 `process.env.NODE_ENV 获取不同环境项目配置信息
process.nextTick:这个在谈及 EventLoop 时经常为会提到
process.pid:获取当前进程id
process.ppid:当前进程对应的父进程
process.cwd():获取当前进程工作目录,
process.platform:获取当前进程运行的操作系统平台
process.uptime():当前进程已运行时间,例如:pm2 守护进程的 uptime 值
进程事件: process.on(‘uncaughtException’,cb) 捕获异常信息、 process.on(‘exit’,cb)进程推出监听
三个标准流: process.stdout 标准输出、 process.stdin 标准输入、 process.stderr 标准错误输出
process.title 指定进程名称,有的时候需要给进程指定一个名称
方法
process.cwd()
返回当前 Node进程执行的目录
process.argv
在终端通过 Node 执行命令的时候,通过 process.argv 可以获取传入的命令行参数,返回值是一个数组
process.env
返回一个对象,存储当前环境相关的所有信息,一般很少直接用到。
process.nextTick()
NodeJs是基于事件轮询,在这个过程中,同一时间只会处理一件事情,在这种处理模式下,process.nextTick()就是定义出一个动作,并且让这个动作在下一个事件轮询的时间点上执行
Node. js中的异步和同步
Node.js是单线程的,异步是通过一次次的循环事件队列来实现的。同步则是阻塞式的IO,这在高并发环境中会是一个很大的性能问题,所以同步一般只在基础框架启动时使用,用来加
载配置文件、初始化程序等。