J'ai vu process.binding('...')
plusieurs fois lors d'une recherche à travers le code source node.js sur github .
Quelqu'un peut-il m'expliquer ce que fait cette fonction?
Cette fonction renvoie le module interne, comme require. Ce n'est pas public, vous ne devez donc pas vous y fier dans votre code, mais vous pouvez l'utiliser pour jouer avec les objets de bas niveau du nœud, si vous voulez comprendre comment les choses fonctionnent.
Par exemple, icitimer_wrap
la liaison est enregistrée. Il exporteTimer
constructeur. Dans lib/timers.js
c'est importé
C'est une fonctionnalité qui sort essentiellement et capture la fonctionnalité C++ et la rend disponible dans le javascript. Prenez cet exemple process.binding('zlib')
utilisé dans zlib
Cela sort essentiellement et obtient l'objet zlib C++, puis il est utilisé le reste du temps dans le code javascript.
Donc, lorsque vous utilisez zlib, vous ne sortez pas et n'attrapez pas la bibliothèque C++, vous utilisez la bibliothèque Javascript qui encapsule la fonctionnalité C++ pour vous.
Il facilite son utilisation
process.binding connecte le côté javascript de Node.js au côté C++ de Node.js. Le côté C++ de node.js est l'endroit où une grande partie du travail interne de tout ce que fait le nœud est réellement implémentée. Donc, une grande partie de votre code repose sur du code C++. Node.js utilise la puissance de C++.
Voici un exemple:
const crypto=require(“crypto”)
const start=Date.now()
crypto.pbkdf2(“a”, “b”, 100000,512,sha512,()=>{
console.log(“1”:Date.now()-start)
})
Crypto est un module intégré dans Node.js pour hacher et enregistrer les mots de passe. C'est ainsi que nous l'implémentons dans Node.js mais le processus de hachage réel a lieu du côté C++ de node.js.
process.binding("crypto")
va amener ce processus aux exportateurs du répertoire src où se trouve le monde c ++ de Node.js. De ce côté de Node.js, V8 va traduire les valeurs node.js que nous plaçons à l'intérieur de nos différents programmes comme un booléen ou une fonction ou un objet et les traduire en leurs équivalents C++.
Une fois le code Javascript traduit en C++, libuv va avoir lieu et fera tous les calculs lourds pour exécuter le code ci-dessus du côté c ++, en dehors de la boucle d'événement, dans le pool de threads.