Node.js hat von seinen ereignisorientierten und asynchronen Funktionen profitiert und war sehr bald. Es ist jedoch nicht möglich, in modernen Netzwerken schnell zu sein. Wenn Sie vorhaben, Node.js zu verwenden, um Ihre nächste Webanwendung zu entwickeln, sollten Sie alles tun, um Ihre Anwendung schneller und außergewöhnlich schneller zu gestalten. In diesem Artikel werden 10 Elemente eingeführt und nach dem Testen die Fähigkeiten der Knotenanwendung erheblich verbessern. Schauen wir uns ohne weiteres nacheinander einen Blick darauf an.
1. parallel
Beim Erstellen einer Webanwendung müssen Sie möglicherweise die interne API mehrmals aufrufen, um verschiedene Daten zu erhalten. Nehmen wir beispielsweise auf der Dashboard -Seite an, Sie müssen die folgenden Anrufe ausführen:
Benutzerinformationen - getUserProfile ().
Aktuelle Aktivität - GetRecentActivity ().
Abonnieren Sie Inhalte - Getubscriptions ().
Benachrichtigungsinhalt - GetNotifications ().
Um diese Informationen zu erhalten, sollten Sie für jede Methode separate Middleware erstellen und sie dann mit der Dashboard -Route verknüpfen. Das Problem ist jedoch, dass die Ausführung dieser Methoden linear ist und der nächste erst beginnt, wenn der vorherige fertig ist. Eine praktikable Lösung besteht darin, sie parallel anzurufen.
Wie Sie wissen, ist Node.js aufgrund von Asynchronität sehr gut darin, mehrere Methoden parallel zu bezeichnen. Wir können keine natürlichen Ressourcen verschwenden. Die oben erwähnten Methoden haben keine Abhängigkeiten, sodass wir sie parallel ausführen können. Auf diese Weise können wir die Anzahl der Middleware reduzieren und die Geschwindigkeit erheblich erhöhen.
Wir können async.js verwenden, um die Parallelität zu bewältigen, ein Knotenmodul, das speziell zum Trainieren von JavaScript asynchron verwendet wird. Der folgende Code zeigt, wie async.js verwendet werden, um mehrere Methoden parallel aufzurufen:
Die Codekopie lautet wie folgt:
Funktion runinParallel () {
async.parallel ([
GetUserProfile,
GetRecentactivity,
GetUbsubscriptions,
GetNotifications
], function (ers, resulting) {
// Dieser Rückruf wird ausgeführt, wenn alle Funktionen abgeschlossen sind
});
}
Wenn Sie sich async.js ausführlich ansehen möchten, bewegen Sie sich bitte auf der Github-Seite.
2. Asynchron
Durch Design node.js ist ein einzelnes Gewinde. Basierend darauf blockiert der Synchroncode die gesamte Anwendung. Beispielsweise haben die meisten Dateisystem -APIs ihre synchronisierten Versionen. Der folgende Code zeigt zwei Vorgänge: Synchrone und asynchrone Dateilesen:
Die Codekopie lautet wie folgt:
// asynchron
fs.ReadFile ('Datei.txt', Funktion (err, buffer) {
var content = buffer.toString ();
});
// Synchron
var content = fs.readFilesync ('file.txt'). toString ();
Wenn Sie jedoch so langfristige Blockiervorgänge ausführen, wird der Hauptfaden bis zum Abschluss dieser Vorgänge blockiert. Dies reduziert die Leistung Ihrer Anwendung erheblich. Daher ist es am besten sicherzustellen, dass Ihr Code die asynchrone Version der API verwendet. Zumindest sollten Sie im Leistungsknoten asynchron sein. Darüber hinaus sollten Sie bei der Auswahl der Module von Drittanbietern sehr vorsichtig sein. Wenn Sie versuchen, Synchronisierungsvorgänge aus Ihrem Code zu entfernen, verschwendet ein synchroner Anruf aus einer externen Bibliothek alle Ihre Bemühungen und verringert Ihre Anwendungsleistung.
3. Cache
Wenn Sie einige Daten verwenden, die sich nicht häufig ändern, sollten Sie diese zur Verbesserung der Leistung zwischenspeichern. Beispielsweise ist der folgende Code ein Beispiel für den neuesten Beitrag und das Anzeigen:
Die Codekopie lautet wie folgt:
var router = express.router ();
Router.Route ('/lastPosts'). get (function (req, res) {
Post.getLatest (Funktion (Err, Beiträge) {
if (err) {
errösten;
}
res.render ('post', {posts: posts});
});
});
Wenn Sie nicht häufig posten, können Sie die Postliste zwischenspeichern und nach einer Weile reinigen. Zum Beispiel können wir das Redis -Modul verwenden, um dieses Ziel zu erreichen. Natürlich müssen Sie Redis auf Ihrem Server installieren. Anschließend können Sie Schlüssel-/Wertpaare mit einem Client namens node_redis speichern. Das folgende Beispiel zeigt, wie wir Beiträge zwischenspeichern:
Die Codekopie lautet wie folgt:
var Redis = Request ('Redis'),
client = redis.createclient (null, null, {detekt_bufer: true}),
Router = express.router ();
Router.Route ('/lastPosts'). get (function (req, res) {
client.get ('posts', function (err, posts) {
if (Beiträge) {
return res.render ('post', {posts: json.parse (posts)});
}
Post.getLatest (Funktion (Err, Beiträge) {
if (err) {
errösten;
}
client.set ('posts', json.stringify (posts));
res.render ('post', {posts: posts});
});
});
});
Sehen Sie, sehen wir zunächst den Redis -Cache, um zu sehen, ob es Beiträge gibt. Wenn ja, nehmen wir diese Beitragslisten aus dem Cache. Andernfalls werden wir den Datenbankinhalt abrufen und die Ergebnisse zwischenspeichern. Darüber hinaus können wir nach einem bestimmten Zeitraum den Redis -Cache reinigen, damit der Inhalt aktualisiert werden kann.
4. Gzip -Kompression
Das Einschalten der GZIP -Komprimierung hat einen enormen Einfluss auf Ihre Webanwendungen. Wenn ein GZIP -komprimierter Browser bestimmte Ressourcen anfordert, wird der Server vor der Rückgabe der Antwort an den Browser komprimiert. Wenn Sie GZIP nicht verwenden, um Ihre statischen Ressourcen zu komprimieren, kann es länger dauern, bis der Browser sie erhalten.
In Express-Anwendungen können wir die integrierte Express.static () Middleware verwenden, um statische Inhalte zu verarbeiten. Darüber hinaus kann statischer Inhalt mithilfe der Komprimierung Middleware komprimiert und verarbeitet werden. Hier sind die Nutzungsbeispiele:
Die Codekopie lautet wie folgt:
var compression = erfordern ('Komprimierung');
app.use (compression ()); // Komprimierung verwenden
app.use (express.static (Path.Join (__ DirName, 'public')));
5. Wenn möglich, rendern Sie mit dem Kunden
Jetzt gibt es super vielseitige und leistungsstarke Client-MVC/MVVM-Frameworks wie AngularJs, Ember, Meteor usw., und es ist sehr einfach, eine einseitige Anwendung zu erstellen. Grundsätzlich müssen Sie nur eine API freilegen und eine JSON -Antwort an den Client zurückgeben, ohne die Seite auf dem Server zu rendern. Auf dem Kunden können Sie Jsons mit Frameworks organisieren und auf der Benutzeroberfläche anzeigen. Das Senden von JSON -Antworten auf dem Server kann die Bandbreite speichern und die Leistung verbessern, da Sie in jeder Antwort keine Layoutsmarken zurückgeben müssen. Richtig, Sie müssen nur Pure JSON zurückgeben und dann auf dem Client rendern.
Werfen wir einen Blick auf mein Tutorial, in dem es darum geht, wie man eine erholsame API mit Express 4 offenbart.
6. Speichern Sie nicht zu viele Daten in Sitzungen
Für typische Express -Seitenanwendungen werden Sitzungsdaten standardmäßig in Speicher gespeichert. Wenn Sie in der Sitzung zu viele Daten sparen, erhöht dies den Serveraufwand erheblich. Entweder Sie wechseln zu einer anderen Speichermethode, um Sitzungsdaten zu speichern, oder versuchen, die in der Sitzung gespeicherte Datenmenge zu minimieren.
Wenn sich Benutzer beispielsweise bei Ihrer App anmelden, können Sie ihre IDs nur in der Sitzung anstelle des gesamten Benutzerdatenobjekts speichern. Für die Abfragen, dass Sie Objekte aus der ID abrufen können, möchten Sie MongoDB oder Redis zum Speichern von Sitzungsdaten verwenden.
7. Abfrage optimieren
Angenommen, Sie haben einen Blog und möchten die neuesten Beiträge auf Ihrer Homepage anzeigen. Sie können Daten über Mongoose wie folgt erhalten:
Die Codekopie lautet wie folgt:
Post.find (). Limit (10) .exec (Funktion (err, posts) {
// Posts an den Kunden senden
});
Das Problem ist jedoch, dass die Find () -Methode von Mongoose alle Felder des Objekts abfragt und viele Felder auf der Homepage nicht erforderlich sind. Beispielsweise speichert Kommentare Antworten auf bestimmte Beiträge. Wir müssen keine Artikelantworten anzeigen, damit wir diese beim Abfragen entfernen können. Dies wird zweifellos die Geschwindigkeit erhöhen. Die obige Abfrage kann so optimiert werden:
Die Codekopie lautet wie folgt:
Post.find (). Limit (10) .Exclude ('Kommentare'). Exec (Funktion (err, posts) {
// Posts an den Kunden senden
});
8. Verwenden Sie die Standard -V8 -Methode
Einige Operationen in einer Sammlung wie MAP, Reduzierung und Nacharbeit unterstützen nicht unbedingt alle Browser. Wir können einige Probleme mit dem Browser -Kompatibilität durch die Vordergrundbibliothek lösen. Für Node.js müssen Sie jedoch genau wissen, welche Vorgänge Googles V8 JavaScript -Engine unterstützt. Auf diese Weise können Sie diese integrierten Methoden direkt verwenden, um die Sammlung auf der Serverseite zu betreiben.
9. Verwenden Sie Nginx vor dem Knoten
Nginx ist ein kleiner und leichtgewichtiger Webserver, mit dem die Last auf Ihrem Node.js -Server reduziert werden kann. Sie können statische Ressourcen auf Nginx anstelle von Knoten konfigurieren. Sie können Antworten mit GZIP auf Nginx komprimieren, um alle Antworten zu verdeutlichen. Wenn Sie also ein Produkt haben, das arbeitet, sollten Sie Nginx verwenden, um die Laufgeschwindigkeit zu verbessern.
10. JavaScript Verpackung
Schließlich können Sie auch die Geschwindigkeit der Seitenanwendung durch Verpacken mehrerer JS -Dateien erheblich verbessern. Wenn der Browser auf das <Skript> -Element in der Seitenrendern trifft, wird es blockiert und wird nicht weiter ausgeführt, bis das Skript erhalten wird (es sei denn, die asynchrone Eigenschaft ist festgelegt). Wenn Ihre Seite beispielsweise über fünf JavaScript -Dateien enthält, stellt der Browser fünf separate HTTP -Anfragen aus, um sie zu erhalten. Wenn diese fünf Dateien in einem komprimiert und verpackt werden, wird die Gesamtleistung erheblich verbessert. Gleiches gilt für CSS -Dateien. Sie können ein Kompilierungstool wie Grunzen/Gulp verwenden, um Ihre Ressourcendateien zu verpacken.
abschließend
Die oben genannten 10 Tipps können definitiv die Geschwindigkeit Ihrer Webanwendungen verbessern. Ich weiß jedoch, dass es Raum für Verbesserungen und Optimierung gibt. Wenn Sie Tipps zur Verbesserung der Leistung haben, lassen Sie es mich in der Antwort wissen.
Danke fürs Lesen!