82

在通过github 上的 node.js 源代码进行研究时,我见过process.binding('...')很多次。

谁能解释一下这个功能是做什么的?

4

3 回答 3

71

此函数返回内部模块,如 require。它不是公开的,所以你不应该在你的代码中依赖它,但是如果你想了解它是如何工作的,你可以用它来玩 node 的低级对象。

例如,此处 timer_wrap绑定已注册。它导出 Timer构造函数。里面lib/timers.js进口的

于 2014-06-04T16:39:46.953 回答
19

它本质上是一种功能,它抓住了 C++ 功能并使其在 javascript 中可用。以zlibprocess.binding('zlib')中使用的这个例子为例

这本质上是出去并获取 zlib C++ 对象,然后在其余时间在 javascript 代码中使用它。

因此,当您使用 zlib 时,您实际上并没有去获取 C++ 库,而是使用为您包装 C++ 功能的 Javascript 库。

它使它更易于使用

于 2017-10-24T11:01:12.667 回答
7

process.binding 将 Node.js 的 javascript 端连接到 Node.js 的 C++ 端。node.js 的 C++ 端是 node 所做的一切的许多内部工作,实际上是在其中实现的。因此,您的许多代码最终都依赖于 C++ 代码。Node.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++ 等价物。

于 2019-06-10T07:48:21.753 回答