通过node.js source code on github进行研究时,我多次见过process.binding('...')
。
有人能解释一下这个功能是做什么的吗?
答案 0 :(得分:62)
此函数返回内部模块,如require。它不是公共的,所以你不应该在你的代码中依赖它,但你可以使用它来使用节点的低级对象,如果你想了解它是如何工作的。
例如,注册了here timer_wrap
绑定。它是exports Timer
构造函数。在lib/timers.js
imported
答案 1 :(得分:11)
这个功能基本上已经消失,并且可以在javascript中使用C ++功能并使其可用。 以zlib
中使用的此示例process.binding('zlib')
为例
这实际上是在获取zlib C ++对象,然后在javascript代码中剩余的时间使用它。
所以当你使用zlib时,你实际上并没有出去 并且抓住C ++库,您可以使用包含C ++功能的Javascript库。
使其更易于使用
答案 2 :(得分:0)
process.binding将Node.js的JavaScript端连接到Node.js的C ++端。实际上,node.js的C ++方面是该节点所做的许多内部工作的地方。因此,您的许多代码最终都依赖于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 ++端进行的。
process.binding("crypto")
将把此过程带到src目录的导出程序,该目录是Node.js的c ++世界。在Node.js的这一方面,V8将转换我们放入不同程序(如布尔值,函数或对象)内的node.js值,并将其转换为C ++等效项。
在将Javascript代码转换为C ++之后,libuv将发生,并将进行所有繁重的计算,以在线程池中的事件循环外部在c ++端执行上述代码。