Node全局对象:global、process和Buffer
global
对象,也是Node
的全局命名空间;
process
对象,它提供了一些关键功能,例如对三种标准I/O流的封装,以及将同步函数转换为异步回调的功能;
Buffer
类,它提供了存储和操作原始数据的功能,同样它也是全局可见的
global
global与浏览器中的window
对象是相似的,它们的关健不同点是:
浏览器中的window
对象是一个真正全局的对象。如果在客户端 JavaScript
中定义一个全局变量,它将能够被Web页面以及每一个独立的库访问到。
而Node
模块中创建一个顶层变量(函数之外的变量),它仅仅在该模块中是全局的,而在其他模块中是不可见的。只有那些被模块显式导出的部分才能被引用该模块的应用程序所使用。
这意味着,由于不小心使用了重复的全局变量名称而引起的数据冲突问题将会大大减少。
process
每个Node
应用程序都是一个process
对象实例,所以,应用程序自然能直接使用某些内建于 process
对象的功能。
process.execPath
方法可以返回当前Node
应用程序的执行路径process.version
提供了Node
版本信息process.platform
提供服务器平台信息process.memoryUsage
方法可以查询当前Node
应用程序的内存使用量
process.nextTick
方法
这个方法可以将一个回调函数挂载到Node
程序的事件循环机制中,并在下一个事件循环发生时调用该函数。 例:
function asynchFunction = function (data, cb) {
process.nextTick(function () {
cb(val)
})
}
虽然使用 setTimout
方法并传入一个0毫秒的延迟可以过到同样的目的
setTimout(function () {
cb(val)
}, 0)
但是,setTimout
并不像 process.nextTick
那样高效,process.nextTick
的调用速度远远快于setTimout
方法
首先你需要将耗时的处理过和打散并分解成多个部分,每个部分分别通过 process.nextTick
调用,最终使得应用程序可以对其他请求进行处理,而无需等待耗时计算过程完成。
Buffer
Buffer
是用于处理二进制数据的一种方式。
流处理往往采用的是二进制数据,而非字符串
Buffer
支持的编码方式包括:
- ascii 七位
ASCII
- utf8 多字节编码的
Unicode
字符 - usc2 两字节,little endian 方式编码的 Unicode 字符
- base64 Base64 编码
- hex 每个字节编码为两个十六进制字符