Lazy loading in node.js
Ich Frage mich, ob mit require()
im node.js war das äquivalent zu lazy loading?
Zum Beispiel, wenn ich hatte eine Funktion erforderlich, dass eine bestimmte node.js Paket, das war nicht nötig, überall sonst in meinem code bin ich am besten zu verwenden require()
innerhalb der Funktion, um die benötigte Paket nur dann, wenn die Funktion aufgerufen wird.
Ich bin mir auch nicht sicher, ob dadurch irgendwelche performance-Verbesserungen gegeben, mein Mangel an Verständnis rund um die node.js die Architektur? Ich vermute, es wird weniger Speicher pro Verbindung zu meinem server. Allerdings wird es erhöhen die I/O auf die Platte, wenn Sie es hat, das Paket zu Lesen, oder wird das eine einmalige, um es im Speicher?
Wenn dies der Fall ist, wie weit sollte ich nehmen, sollte ich versuchen zu schreiben node.js Pakete für so viel code, wie ich kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
require()
ist on-demand-laden. Sobald ein Modul geladen wurde, wird es nicht erneut geladen werden, wenn die require () - Aufruf erneut ausgeführt wird. Indem Sie es innerhalb einer Funktion anstelle Ihrer top-level-Modul-code haben, können Sie unverzüglich Ihren laden oder potenziell vermeiden Sie es, wenn man eigentlich nie den Aufruf der Funktion. Allerdingsrequire()
ist synchron und lädt das Modul von der Festplatte, also am besten laden Sie alle Module, die Sie brauchen, beim starten der Anwendung bevor die Anwendung gestartet portion Anträge, die dann dafür sorgt, dass nur asynchrone IO geschieht, während die Anwendung in Betrieb ist.Knoten ist " single-threaded, so dass der Speicherbedarf beim laden eines Moduls ist nicht pro Verbindung pro Prozess. Das laden eines Moduls ist ein einmalige, um es in den Speicher.
Just-stick mit der Konvention hier und verlangen, dass die Module, die Sie benötigen, auf der obersten Ebene Bereich Ihrer app, bevor Sie beginnen, die Verarbeitung von Anfragen. Ich denke, dies ist ein Fall von, wenn Sie haben zu Fragen, ob Sie brauchen, um Ihren code schreiben, in einer ungewöhnlichen Weise, die Sie nicht brauchen, um Ihren code schreiben, in einer ungewöhnlichen Weise.
Wenn Sie wollen, um lazy load-Module, die jetzt möglich mit ES6 (Knoten v6)
Edit: Das wird nicht funktionieren, wenn Sie brauchen, um auf Eigenschaften zugreifen, erfordern (wie
erfordern.cache).
module.js
main.js
Ausgabe