一、global
全局对象,我认为相当于浏览器中的window
像下面要说的process 以及 setTImeout了等等,都是挂在它上面的。默认可以不写直接调用process ,setTImeout。
不通过var声明(浏览器如果没有var声明默认会提升变量到window上)或者定义在global变量上的都是全局变量。全局变量作用域直到进程退出才能释放。
二、process对象上的对象和方法
1.process.env
一般情况下我们会在此对象上赋值
例如 process.env.PORT 来通过命令行或者config配置端口。(命令行设置我知道的 cross-env模块)
process.env.NODE_ENV 来设置是开发环境还是生产环境
这些模块默认本身是undefined,只是大家都这么潜规则,方便大家看别人代码一看便知
2.process.memoryUsage()
打印:{ rss: 31432704, heapTotal: 18748496, heapUsed: 11408320 }
rss: 进程的常驻内存部分
heapTotal和heapUsed 都是V8堆内存信息
heapTotal 是堆中总共申请的内存量
heapUsed 表示堆内存中目前使用的内存量
单位 都是字节
3.process.nextTick(func)
这个东东其实与setTimeout(func,0)作用一样的,表示立即执行,但是他们有个共同特点就是“异步”
process.nextTIce(function(){
console.log("延迟执行");
})
console.log("正常执行");
打印: 正常执行
延迟执行
因为process.nextTIck 调用会将回调函数插入队列,在下一轮Tick时执行。
与setTImeout比较就是性能高,但是不能取代,因为setTimeout可以规定多少毫秒后执行,虽然有些许误差存在
3.process.setImmediate(func)
这个函数与上面异曲同工,只是它属于check观察者,而nextTIck属于idle观察者
先后顺序: 在每一次tick循环idle观察者优先于I/O观察者,I/O观察者优先于check观察者
总结: 先同步执行,然后异步,异步执行遵循上面的先后顺序
当然这里面还有很多东东,后续会持续总结。。。