githubのnode.jsソースコード を調べていると、process.binding('...')
を何度も見ました。
誰もこの機能が何をするのか説明できますか?
これは、本質的にC++機能を取得してjavascript内で使用できるようにする機能です。 zlib で使用されるprocess.binding('zlib')
の例を取り上げます
これは本質的に外に出てzlib C++オブジェクトを取得し、それ以外の時間はJavaScriptコードで使用されています。
したがって、zlibを使用するときは、実際にC++ライブラリを取得するのではなく、C++機能をラップするJavascriptライブラリを使用しています。
使いやすくなります
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 ++側、イベントループ外、スレッドプールで上記のコードを実行するためにすべての重い計算が行われます。