在通过github 上的 node.js 源代码进行研究时,我见过process.binding('...')
很多次。
谁能解释一下这个功能是做什么的?
在通过github 上的 node.js 源代码进行研究时,我见过process.binding('...')
很多次。
谁能解释一下这个功能是做什么的?
它本质上是一种功能,它抓住了 C++ 功能并使其在 javascript 中可用。以zlibprocess.binding('zlib')
中使用的这个例子为例
这本质上是出去并获取 zlib C++ 对象,然后在其余时间在 javascript 代码中使用它。
因此,当您使用 zlib 时,您实际上并没有去获取 C++ 库,而是使用为您包装 C++ 功能的 Javascript 库。
它使它更易于使用
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++ 等价物。