Node全局对象:global、process和Buffer

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 每个字节编码为两个十六进制字符
0%