【发布时间】:2014-07-25 10:09:59
【问题描述】:
在通过node.js source code on github 进行研究时,我已经多次看到process.binding('...')。
谁能解释一下这个函数的作用?
【问题讨论】:
标签: javascript c++ node.js v8 undocumented-behavior
在通过node.js source code on github 进行研究时,我已经多次看到process.binding('...')。
谁能解释一下这个函数的作用?
【问题讨论】:
标签: javascript c++ node.js v8 undocumented-behavior
它本质上是一种功能,它可以获取 C++ 功能并使其在 javascript 中可用。
以process.binding('zlib') 中使用的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++ 等价物。
【讨论】: