NodeJS架构
V8: 执行JS代码,提供桥梁接口
Libuv: 时间循环、事件队列、异步IO
第三方模块: zlib、http、c-ares等
libuv
事件循环机制图(已移除本地图片引用)
node事件循环
事件循环流程图(已移除本地图片引用)
NodeJS特点
NodeJS主线程单线程
NodeJS更适合IO密集型的高并发请求
NodeJS作为中间层
![[Pasted image 20230418140506.png]]
常见全局变量
__filename: 返回正在执行脚本文件的绝对路径
__dirname: 返回正在执行脚本的所在目录
timer类函数: 执行顺序与事件循环间的关系
process:提供与当前进程互动的接口
require: 实现模块的加载
module、exports: 处理模块的导出
process
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
| 1.资源: CPU 内存
console.log(process.memoryUsage()); { rss: 31047680, heapTotal: 6434816, heapUsed: 5687912, external: 422438, arrayBuffers: 17606 }
console.log(process.cpuUsage());
{ user: 15000, system: 46000 }
2.运行环境: 运行目录 node环境 cpu架构 用户环境 系统平台
console.log(process.cwd());
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);
console.log(process.env.NODE_ENV);
console.log(process.platform);
3.运行状态: 启动参数、PID、运行时间
console.log(process.argv);
console.log(process.argv0);
console.log(process.exeArgv);
console.log(process.pid);
console.log(process.uptime());
setTimeout(() => { console.log(process.uptime()) }, 3000)
4.事件监听
process.on('exit', (code) => {
console.log('exit ' + code);
})
process.on('beforeExit', (code) => {
console.log('beforeExit ' + code);
})
console.log('executed');
process.exit();
5.标准输入 输出 错误
const fs = require('fs');
fs.createReadStream('test.txt')
.pipe(process.stdout)
process.stdin.pipe(process.stdout)
process.stdin.setEncoding('utf-8')
process.stdin.on('readable', () => {
let chunk = process.stdin.read();
if (chunk !== null) {
process.stdout.write('data ' + chunk);
}
})
|
path
basename() 获取路径中基础名称
dirname() 获取路径中的目录名称
extname() 获取路径中的扩展名称
isAbsolute() 获取路径是否为绝对路径
join() 拼接多个路径片段
resolve() 返回绝对路径
pasre() 解析路径
format() 序列化路径
normalize() 规范化路径