【问题标题】:Nodejs: What does `process.binding` mean?Nodejs:“process.binding”是什么意思?
【发布时间】:2014-07-25 10:09:59
【问题描述】:

在通过node.js source code on github 进行研究时,我已经多次看到process.binding('...')

谁能解释一下这个函数的作用?

【问题讨论】:

    标签: javascript c++ node.js v8 undocumented-behavior


    【解决方案1】:

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

    例如,here timer_wrap 绑定已注册。它exportsTimer 构造函数。在lib/timers.jsimported

    【讨论】:

    • process.binding 似乎从 v11.x 更改为 internalBinding
    【解决方案2】:

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

    这实质上是出去获取 zlib C++ 对象,然后在其余时间在 javascript 代码中使用它。

    所以当你使用 zlib 时,你实际上并没有出去 并抓住 C++ 库,您正在使用为您包装 C++ 功能的 Javascript 库。

    使用起来更方便

    【讨论】:

    • 感谢您简洁明了的解释。
    【解决方案3】:

    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++ 等价物。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 2013-03-09
      相关资源
      最近更新 更多