web-dev-qa-db-ja.com

Nodejs:「process.binding」とはどういう意味ですか?

githubのnode.jsソースコード を調べていると、process.binding('...')を何度も見ました。

誰もこの機能が何をするのか説明できますか?

73
laconbass

この関数は、requireのような内部モジュールを返します。パブリックではないので、コードでこれに依存するべきではありませんが、物事の仕組みを理解したい場合は、ノードの低レベルオブジェクトを操作するために使用できます。

たとえば、 heretimer_wrapバインディングが登録されています。 It exportsTimerコンストラクター。 lib/timers.jsそれは インポート済み

63
vkurchatkin

これは、本質的にC++機能を取得してjavascript内で使用できるようにする機能です。 zlib で使用されるprocess.binding('zlib')の例を取り上げます

これは本質的に外に出てzlib C++オブジェクトを取得し、それ以外の時間はJavaScriptコードで使用されています。

したがって、zlibを使用するときは、実際にC++ライブラリを取得するのではなく、C++機能をラップするJavascriptライブラリを使用しています。

使いやすくなります

13

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")は、Node.jsのc ++ワールドであるsrcディレクトリのエクスポーターにこのプロセスを実行します。 Node.jsのこちら側では、V8はブール値、関数、オブジェクトなど、さまざまなプログラム内に配置したnode.jsの値を変換し、C++の同等物に変換します。

JavascriptコードがC++に変換された後、libuvが実行され、c ++側、イベントループ外、スレッドプールで上記のコードを実行するためにすべての重い計算が行われます。

0
Yilmaz