Nodejs: process.binding 是什么意思?

在研究 Js 在 github 上的源代码的过程中,我看了很多次 process.binding('...')

有人能解释一下这个函数是做什么的吗?

16961 次浏览

此函数返回内部模块,如要求。它不是公共的,因此您不应该在代码中依赖它,但是如果您想了解事情是如何工作的,那么您可以使用它来处理节点的低级对象。

例如,给你 timer_wrap绑定被注册。它是 出口 Timer构造函数。在 lib/timers.js中它是 进口的

这个特性本质上是抓住 C + + 特性并在 javascript 中使其可用。 以 Zlib中使用的 process.binding('zlib')为例

这实际上就是获取 zlib C + + 对象,然后在 javascript 代码中的其余时间使用它。

所以当你使用 zlib 的时候,你并不是真的要出去 然后抓取 C + + 库,就可以使用包装 C + + 特性的 Javascript 库。

这样更容易使用

Bind 将 Node.js 的 javascript 端连接到 Node.js 的 C + + 端。Js 的 C + + 端实际上是实现节点所做的所有内部工作的地方。所以很多代码最终都依赖于 C + + 代码。Js 使用了 C + + 的强大功能。

这里有一个例子:

const crypto=require(“crypto”)
const start=Date.now()
crypto.pbkdf2(“a”, “b”, 100000,512,sha512,()=>{
console.log(“1”:Date.now()-start)
})

Crypto 是 Node.js 中用于散列和保存密码的内置模块。这是我们在 Node.js 中实现它的方式,但是实际的哈希过程发生在 Node.js 的 C + + 端。

当 node.js 运行这个函数时,实际上是在这个函数内部,它将所有的参数传递给 PBKDF2()函数,即 c + + 代码。该函数执行所有计算并返回结果。这就是 PBKDF 如何导入到 node.js 的 javascript 端

const {PBKDF2}=process.binding(“crypto”)

这就是 node.js 的 javascript 端与 node.js 的 c + + 端的连接方式。在 node.js 的 c + + 端,V8将把 node.js 值转换成 c + + 等价物。