web-dev-qa-db-fra.com

Nodejs: Que signifie `process.binding`?

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?

73
laconbass

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é

63
vkurchatkin

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

13
Mohamed Ben HEnda

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.

0
Yilmaz