在研究 Js 在 github 上的源代码的过程中,我看了很多次 process.binding('...')。
process.binding('...')
有人能解释一下这个函数是做什么的吗?
此函数返回内部模块,如要求。它不是公共的,因此您不应该在代码中依赖它,但是如果您想了解事情是如何工作的,那么您可以使用它来处理节点的低级对象。
例如,给你 timer_wrap绑定被注册。它是 出口 Timer构造函数。在 lib/timers.js中它是 进口的
timer_wrap
Timer
lib/timers.js
这个特性本质上是抓住 C + + 特性并在 javascript 中使其可用。 以 Zlib中使用的 process.binding('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 端
PBKDF2()
const {PBKDF2}=process.binding(“crypto”)
这就是 node.js 的 javascript 端与 node.js 的 c + + 端的连接方式。在 node.js 的 c + + 端,V8将把 node.js 值转换成 c + + 等价物。