Nodejs:`process.binding`是什么意思?

lac*_*ass 74 javascript c++ v8 node.js undocumented-behavior

process.binding('...')通过github上node.js源代码研究了很多次.

任何人都能解释一下这个函数的作用吗?

vku*_*kin 64

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

例如,此处 timer_wrap已注册绑定.它导出 Timer构造函数.在lib/timers.js它的导入

  • `process.binding` 似乎从 v11.x 更改为 `internalBinding` (4认同)

Moh*_*nda 15

它本质上是一个功能,它可以获取C++功能,并使其在javascript中可用.以zlib中process.binding('zlib')使用的此示例为例

这基本上是出去获取zlib C++对象,然后在javascript代码中剩余的时间使用它.

因此,当你使用zlib时,你实际上并没有出去抓取C++库,而是使用了为你包装C++特性的Javascript库.

它使它更容易使用

  • 感谢您简短明了的解释。 (2认同)

Yil*_*maz 8

process.binding 将 Node.js 的 javascript 端连接到 Node.js 的 C++ 端。Node.js 的 C++ 方面是 Node 所做的许多内部工作的实际实现地。因此,您的许多代码最终都依赖于 C++ 代码。Node.js 正在利用 C++ 的强大功能。

\n\n

这是一个例子:

\n\n
const crypto=require(\xe2\x80\x9ccrypto\xe2\x80\x9d)\nconst start=Date.now()\ncrypto.pbkdf2(\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cb\xe2\x80\x9d, 100000,512,sha512,()=>{\nconsole.log(\xe2\x80\x9c1\xe2\x80\x9d:Date.now()-start)\n})\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
const {PBKDF2}=process.binding(\xe2\x80\x9ccrypto\xe2\x80\x9d)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就是node.js 的javascript 端与node.js 的c++ 端连接的方式。在 Node.js 的 C++ 端,V8 会将 Node.js 值转换为相应的 C++ 值。

\n