Ich habe gesehen process.binding('...')
viele Male den Quellcode von node.js auf github recherchiert habe .
Kann mir jemand erklären, was diese Funktion bewirkt?
javascript
c++
node.js
v8
undocumented-behavior
Laconbass
quelle
quelle
process.binding
scheint sichinternalBinding
von v11.x zu ändernEs ist eine Funktion, die im Wesentlichen ausgeht und die C ++ - Funktion greift und sie im Javascript verfügbar macht. Nehmen Sie dieses Beispiel
process.binding('zlib')
, das in zlib verwendet wirdDies geht im Wesentlichen aus und holt das zlib C ++ - Objekt und wird dann den Rest der Zeit im Javascript-Code verwendet.
Wenn Sie also zlib verwenden, gehen Sie nicht wirklich raus und greifen auf die C ++ - Bibliothek zu, sondern auf die Javascript-Bibliothek, die die C ++ - Funktion für Sie umschließt.
Es macht es einfacher zu bedienen
quelle
process.binding verbindet die Javascript-Seite von Node.js mit der C ++ - Seite von Node.js. Auf der C ++ - Seite von node.js wird ein Großteil der internen Arbeit von allem, was der Knoten tut, tatsächlich implementiert. Ein Großteil Ihres Codes basiert also letztendlich auf C ++ - Code. Node.js nutzt die Leistung von C ++.
Hier ist ein Beispiel:
const crypto=require(“crypto”) const start=Date.now() crypto.pbkdf2(“a”, “b”, 100000,512,sha512,()=>{ console.log(“1”:Date.now()-start) })
Crypto ist ein in Node.js integriertes Modul zum Hashing und Speichern von Passwörtern. So implementieren wir es in Node.js, aber der eigentliche Hashing-Prozess findet auf der C ++ - Seite von node.js statt.
Wenn node.js diese Funktion tatsächlich innerhalb dieser Funktion ausführt, werden alle Argumente an die
PBKDF2()
Funktion übergeben, bei der es sich um den C ++ - Code handelt. Diese Funktion führt alle Berechnungen durch und gibt das Ergebnis zurück. Auf diese Weise wurde PBKDF in die Javascript-Seite von node.js importiertconst {PBKDF2}=process.binding(“crypto”)
Auf diese Weise wird die Javascript-Seite von node.js mit der c ++ - Seite von node.js verbunden. Auf der c ++ - Seite von node.js übersetzt V8 die Werte von node.js in ihre c ++ - Entsprechungen.
quelle