Heim > Web-Frontend > js-Tutorial > Hauptteil

10 Tipps zur Optimierung der Geschwindigkeit Ihrer Node.js-Webanwendung_node.js

WBOY
Freigeben: 2016-05-16 16:37:42
Original
1018 Leute haben es durchsucht

Node.js ist dank seiner ereignisgesteuerten und asynchronen Natur bereits schnell. Allerdings reicht es in modernen Netzwerken nicht aus, nur schnell zu sein. Wenn Sie Node.js zum Entwickeln Ihrer nächsten Webanwendung verwenden möchten, sollten Sie alles tun, um Ihre Anwendung schneller und rasend schnell zu machen. In diesem Artikel werden 10 getestete Tipps vorgestellt, die Node-Anwendungen erheblich verbessern können. Schauen wir sie uns ohne weitere Umschweife einzeln an.

1. Parallel

Beim Erstellen einer Webanwendung müssen Sie möglicherweise die interne API mehrmals aufrufen, um verschiedene Daten zu erhalten. Angenommen, Sie möchten auf der Dashboard-Seite die folgenden Aufrufe ausführen:

Benutzerinformationen -getUserProfile().

Aktuelle Aktivität -getRecentActivity().

Abonnementinhalt -getSubscriptions().

Benachrichtigungsinhalt -getNotifications().

Um diese Informationen zu erhalten, würden Sie für jede Methode eine separate Middleware erstellen und diese dann mit der Dashboard-Route verknüpfen. Das Problem besteht jedoch darin, dass die Ausführung dieser Methoden linear ist und die nächste erst beginnt, wenn die vorherige endet. Eine mögliche Lösung besteht darin, sie parallel aufzurufen.

Wie Sie wissen, ist Node.js aufgrund der Asynchronität sehr gut darin, mehrere Methoden parallel aufzurufen. Wir dürfen unsere Ressourcen nicht 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 Menge an Middleware reduzieren und die Geschwindigkeit deutlich erhöhen.

Wir können async.js verwenden, um Parallelität zu handhaben. Hierbei handelt es sich um ein Node-Modul, das speziell zur asynchronen Optimierung von JavaScript verwendet wird. Der folgende Code zeigt, wie Sie mit async.js mehrere Methoden parallel aufrufen:

Code kopieren Der Code lautet wie folgt:

Funktion runInParallel() {
async.parallel([
GetUserProfile,
GetRecentActivity,
Holen Sie sich Abonnements,
GetNotifications
], function(err, results) {
//Dieser Rückruf wird ausgeführt, wenn alle Funktionen abgeschlossen sind
});
}

Wenn Sie mehr über async.js erfahren möchten, besuchen Sie bitte dessen GitHub-Seite.

2. Asynchron

Node.js ist von Natur aus Single-Threaded. Auf dieser Grundlage kann synchroner Code die gesamte Anwendung verstopfen. Beispielsweise haben die meisten Dateisystem-APIs ihre synchronen Versionen. Der folgende Code demonstriert sowohl synchrone als auch asynchrone Vorgänge beim Lesen von Dateien:

Code kopieren Der Code lautet wie folgt:

// Asynchron
fs.readFile('file.txt', function(err, buffer) {
var content = buffer.toString();
});

// Synchron
var content = fs.readFileSync('file.txt').toString();


Wenn Sie jedoch langfristige Blockierungsvorgänge ausführen, wird der Hauptthread blockiert, bis diese Vorgänge abgeschlossen sind. Dadurch wird die Leistung Ihrer Anwendung erheblich beeinträchtigt. Daher ist es am besten, sicherzustellen, dass Sie die asynchrone Version der API in Ihrem Code verwenden. Zumindest sollten Sie im Leistungsknoten asynchron sein. Auch bei der Auswahl von Drittanbietermodulen sollten Sie vorsichtig sein. Denn wenn Sie versuchen, Synchronisierungsvorgänge aus Ihrem Code zu eliminieren, macht ein synchroner Aufruf aus einer externen Bibliothek alle Ihre Bemühungen zunichte und verringert die Leistung Ihrer Anwendung.

3. Caching

Wenn Sie Daten verwenden, die sich nicht häufig ändern, sollten Sie sie zwischenspeichern, um die Leistung zu verbessern. Der folgende Code ist beispielsweise ein Beispiel dafür, wie die neuesten Beiträge abgerufen und angezeigt werden:

Code kopieren Der Code lautet wie folgt:

var router = express.Router();

router.route('/latestPosts').get(function(req, res) {
Post.getLatest(function(err, posts) {
Wenn (irrt) {
           throw err;
}

res.render('posts', { posts: posts });
});
});


Wenn Sie nicht oft posten, können Sie die Liste der Beiträge zwischenspeichern und sie nach einer gewissen Zeit löschen. Um diesen Zweck zu erreichen, können wir beispielsweise das Redis-Modul verwenden. Natürlich muss Redis auf Ihrem Server installiert sein. Anschließend können Sie einen Client namens node_redis verwenden, um Schlüssel/Wert-Paare zu speichern. Das folgende Beispiel zeigt, wie wir Beiträge zwischenspeichern:
Code kopieren Der Code lautet wie folgt:

var redis = require('redis'),
Client = redis.createClient(null, null, { discover_buffers: true }),
Router = express.Router();

router.route('/latestPosts').get(function(req,res){
client.get('posts', function (err, posts) {
Wenn (Beiträge) {
Geben Sie res.render('posts', { posts: JSON.parse(posts) });
zurück }

Post.getLatest(function(err, posts) {
Wenn (irrt) {
          throw err;
}

client.set('posts', JSON.stringify(posts));
res.render('posts', { posts: posts });
});
});
});


Sehen Sie, wir überprüfen zuerst den Redis-Cache, um zu sehen, ob ein Beitrag vorhanden ist. Wenn ja, erhalten wir die Liste der Beiträge aus dem Cache. Andernfalls rufen wir den Datenbankinhalt ab und speichern die Ergebnisse zwischen. Darüber hinaus können wir nach einer bestimmten Zeit den Redis-Cache leeren, damit der Inhalt aktualisiert werden kann.

4. gzip-Komprimierung

Das Aktivieren der GZIP-Komprimierung kann große Auswirkungen auf Ihre Webanwendung haben. Wenn ein gzip-komprimierter Browser eine Ressource anfordert, komprimiert der Server die Antwort, bevor er sie an den Browser zurückgibt. Wenn Sie Ihre statischen Ressourcen nicht gzipen, kann es länger dauern, bis der Browser sie abruft.

In Express-Anwendungen können wir die integrierte express.static()-Middleware verwenden, um statische Inhalte zu verarbeiten. Darüber hinaus können statische Inhalte mithilfe der Komprimierungs-Middleware komprimiert und verarbeitet werden. Das Folgende ist ein Anwendungsbeispiel:

Code kopieren Der Code lautet wie folgt:

var compress = require('compression');

app.use(compression()); //Komprimierung verwenden
app.use(express.static(path.join(__dirname, 'public')));

5. Verwenden Sie nach Möglichkeit clientseitiges Rendering

Heutzutage gibt es viele vielseitige und leistungsstarke clientseitige MVC/MVVM-Frameworks wie AngularJS, Ember, Meteor usw., die das Erstellen einer Single-Page-Anwendung sehr einfach machen. Im Grunde stellen Sie einfach eine API bereit und geben eine JSON-Antwort an den Client zurück, ohne die Seite auf der Serverseite zu rendern. Auf der Clientseite können Sie Frames verwenden, um JSON zu organisieren und auf der Benutzeroberfläche anzuzeigen. Wenn Sie nur JSON-Antworten auf dem Server senden, sparen Sie Bandbreite und verbessern die Leistung, da Sie nicht in jeder Antwort Layout-Markups zurückgeben müssen, oder? Sie müssen nur reines JSON zurückgeben und diese dann auf dem Client rendern.

Sehen Sie sich dieses Tutorial an, wie Sie RESTful-APIs mit Express 4 verfügbar machen. Ich habe auch ein weiteres Tutorial geschrieben, das zeigt, wie man diese APIs mit AngularJS kombiniert.

6. Speichern Sie nicht zu viele Daten in Sitzungen

In einer typischen Express-Seitenanwendung werden Sitzungsdaten standardmäßig im Speicher gespeichert. Wenn Sie zu viele Daten in der Sitzung speichern, erhöht sich der Serveraufwand erheblich. Entweder wechseln Sie zu einer anderen Speichermethode, um Sitzungsdaten zu speichern, oder Sie versuchen, die in der Sitzung gespeicherte Datenmenge zu reduzieren.

Wenn sich beispielsweise ein Benutzer bei Ihrer Anwendung anmeldet, können Sie statt des gesamten Benutzerdatenobjekts nur seine ID in der Sitzung speichern. Für Abfragen, bei denen Sie das Objekt anhand der ID abrufen können, möchten Sie möglicherweise MongoDB oder Redis zum Speichern der Sitzungsdaten verwenden.

7. Abfrage optimieren

Angenommen, Sie haben einen Blog und möchten die neuesten Beiträge auf der Startseite anzeigen. Sie können Daten über Mongoose wie folgt abrufen:

Code kopieren Der Code lautet wie folgt:

Post.find().limit(10).exec(function(err, posts) {
//Beiträge an den Kunden senden
});

Das Problem besteht jedoch darin, dass die find()-Methode von Mongoose alle Felder des Objekts abfragt und viele Felder auf der Homepage nicht erforderlich sind. Commentsis speichert beispielsweise Antworten auf einen bestimmten Beitrag. Da wir keine Artikelantworten anzeigen müssen, können wir sie bei der Abfrage ausschließen. Dies wird definitiv die Geschwindigkeit erhöhen. Sie können die obige Abfrage wie folgt optimieren:
Code kopieren Der Code lautet wie folgt:

Post.find().limit(10).exclude('comments').exec(function(err, posts) {
//Beiträge an den Kunden senden
});

8. Verwenden Sie die Standard-V8-Methode

Einige Vorgänge für Sammlungen, wie z. B. „map“, „reduce“ und „forEach“, werden möglicherweise nicht in allen Browsern unterstützt. Wir können einige Browserkompatibilitätsprobleme über die Front-End-Bibliothek lösen. Für Node.js müssen Sie jedoch genau wissen, welche Vorgänge die V8-JavaScript-Engine von Google unterstützt. Auf diese Weise können Sie diese integrierten Methoden direkt verwenden, um die Sammlung auf der Serverseite zu bearbeiten.

9. Verwenden Sie Nginx vor Node

Nginx ist ein kleiner, leichter Webserver, der die Belastung Ihres Node.js-Servers reduzieren kann. Sie können statische Ressourcen auf Nginx statt auf Node konfigurieren. Sie können gzip verwenden, um Antworten auf Nginx zu komprimieren und so alle Antworten kleiner zu machen. Wenn Sie also ein laufendes Produkt haben, sollten Sie meiner Meinung nach Nginx verwenden, um die Ausführungsgeschwindigkeit zu verbessern.

10. JavaScript verpacken

Schließlich können Sie die Geschwindigkeit der Seitenanwendung auch erheblich verbessern, indem Sie mehrere JS-Dateien packen. Wenn der Browser beim Rendern der Seite auf das Element

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage