文档
内容概要
- Nodejs 可以做什么
- Nodejs 的架构和运行过程
- Nodejs 异步IO和事件驱动
- Nodejs 单线程
- Nodejs 实现 API 服务
-
Node.js 可以做什么
轻量级、高性能的Web 服务
- 前后端 JS 同构开发
- 便捷高效的前端工程化
Nodejs 的架构和运行过程
Natives modules
- 当前层内容由 JS 实现
- 提供应用程序可直接调用库,例如fs、path、http 等
-
Builtin modules “胶水层”
提供操作文件读写等一些功能
-
底层
V8: 执行 JS 代码, 提供桥梁接口
- Libuv: 事件循环、事件队列、异步IO
- 第三方模块: zlib、http、c-ares 等
运行过程
Nodejs 异步IO
- IO 是应用程序的瓶颈所在
- 异步 IO 提高性能无采原地等待结果返回
- IO 操作属于操作系统级别, 平台都有对应实现
- Nodejs 单线程配合事件驱动架构及 libuv 实现了异步 IO
Nodejs 事件驱动架构
- 事件驱动架构是软件开发中的通用模式
- 事件驱动、发布订阅、观察者
-
Nodejs 单线程
异步IO、事件驱动、事件循环
- Nodejs 主线程是单线程
- 使用 JS 实现高效可伸缩的高性能 Web 服务
- 单线程实现高并发
- 异步非阻塞 IO 配合事件回调通知
Nodejs 应用场景
- IO 密集型高并发请求
- nodejs 作为中间层
- 操作数据库提供 API 服务
- 实时聊天应用
全局对象
- 与浏览器平台的 window 不完全相同
- Nodejs 全局对象上挂载许多属性
- 全局对象是 JS 中的特殊对象
- Nodejs 中全局对象是global
- Global 的根本作用就是作为宿主
- 全局对象可以看作是全局变量的宿主
Nodejs 常见全局变量
无须 require 可直接使用
- 获取进程信息
- 执行进程操作
- 资源: cpu 内存
- 运行环境: 运行目录、node环境、cpu架构、用户环境、系统平台
- 运行状态:启动参数、PID、运行时间
- 事件监听:发布-订阅模式
- 标准的输出、输入、错误
- process.stdin 输入
- process.stdout 输入 ```typescript // 1、资源类 console.log(process.memoryUsage()) / { rss: 160002048, heapTotal: 131510272, heapUsed: 108209720, external: 2165088 } / console.log(process.cpuUsage()) / { user: 3513102, system: 173436 } /
// 2、运行环境 console.log(process.cwd()) // /Users/onion/Downloads/Code/test
console.log(process.version) console.log(process.versions) console.log(process.arch) console.log(process.env.NODE_ENV) console.log(process.env.PATH) console.log(process.env.USERPROFILE) // HOME console.log(process.platform)
// 3、运行状态
console.log(process.argv) // 返回数组 console.log(process.argv0) // 返回数组第一个值 console.log(process.pid)
console.log(process.uptime()) // 运行耗时
// 4、事件
process.on(‘exit’, (code) => { // 这里要求是同步代码, 不能是异步的 console.log(‘exit ‘ + code) })
process.on(‘beforeExit’, (code) => { console.log(‘beforeExit ‘ + code) })
// 5、标准的输入 错误
console.log = function(data) { process.stdout.write(‘—-‘ + data + ‘\n’) } console.log(11) console.log(22)
// —-11 // —-22
process.stdin.pipe(process.stdout) // 将面板输入的内容输出
```