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?
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?
Antworten:
Diese Funktion gibt das interne Modul zurück, wie erforderlich. Es ist nicht öffentlich, daher sollten Sie sich in Ihrem Code nicht darauf verlassen, aber Sie können es verwenden, um mit den Objekten auf niedriger Ebene des Knotens zu spielen, wenn Sie verstehen möchten, wie die Dinge funktionieren.
Zum Beispiel, hier timer_wrap
ist verbindlich registriert hat . Es exportiert Timer
Konstruktor. In lib/timers.js
es ist importiert
Es 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 wird
Dies 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
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 importiert
const {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.
process.binding
scheint sichinternalBinding
von v11.x zu ändern