Node.js a bénéficié de ses caractéristiques axées sur les événements et asynchrones, et a été très bientôt. Cependant, il n'est pas possible d'être rapide dans les réseaux modernes. Si vous prévoyez d'utiliser Node.js pour développer votre prochaine application Web, vous devez tout faire pour rendre votre application plus rapidement et exceptionnellement rapide. Cet article introduira 10 éléments, et après les tests, il peut considérablement améliorer les compétences de l'application de nœud. Sans plus tarder, jetons un coup d'œil un par un.
1. Parallèle
Lors de la création d'une application Web, vous devrez peut-être appeler l'API interne plusieurs fois pour obtenir diverses données. Par exemple, supposons sur la page du tableau de bord, vous devez exécuter les appels suivants:
Informations utilisateur - getUserProfile ().
Activité actuelle - getRecentActivity ().
Abonnez-vous au contenu - getSubScriptions ().
Contenu de notification - getNotifications ().
Pour obtenir ces informations, vous devez créer un middleware séparé pour chaque méthode, puis les lier à l'itinéraire du tableau de bord. Mais le problème est que l'exécution de ces méthodes est linéaire, et la suivante ne commencera pas avant la fin du précédent. Une solution réalisable consiste à les appeler en parallèle.
Comme vous le savez, Node.js est très bon pour appeler plusieurs méthodes en parallèle en raison de l'asynchrone. Nous ne pouvons pas gaspiller des ressources naturelles. Les méthodes que j'ai mentionnées ci-dessus n'ont pas de dépendances, nous pouvons donc les exécuter en parallèle. De cette façon, nous pouvons réduire le nombre de middleware et augmenter considérablement la vitesse.
Nous pouvons utiliser Async.js pour gérer le parallélisme, qui est un module de nœud spécialement utilisé pour entraîner JavaScript de manière asynchrone. Le code suivant montre comment utiliser async.js pour appeler plusieurs méthodes en parallèle:
La copie de code est la suivante:
fonction runInParallelal () {
Async.Parallel ([
getUserProfile,
getRecentActivity,
getSubscriptions,
getNotifications
], fonction (err, résultats) {
// Ce rappel s'exécute lorsque toutes les fonctions complètent
});
}
Si vous voulez avoir un aperçu plus approfondi d'Async.js, veuillez déplacer sur sa page GitHub.
2. Asynchrone
Par Design Node.js est unique. Sur la base de cela, le code synchrone bloque l'ensemble de l'application. Par exemple, la plupart des API du système de fichiers ont leurs versions synchronisées. Le code suivant montre deux opérations: lecture de fichiers synchrone et asynchrone:
La copie de code est la suivante:
// asynchrone
fs.readfile ('file.txt', fonction (err, tampon) {
var contenu = buffer.toString ();
});
// synchrone
var content = fs.readfilesync ('file.txt'). toString ();
Cependant, si vous effectuez de telles opérations de blocage à long terme, le fil principal sera bloqué jusqu'à ce que ces opérations soient terminées. Cela réduit considérablement les performances de votre application. Par conséquent, il est préférable de vous assurer que votre code utilise la version asynchrone de l'API, au moins vous devez être asynchrone dans le nœud de performance. De plus, vous devez être très prudent lorsque vous choisissez des modules tiers. Parce que lorsque vous essayez de supprimer les opérations de synchronisation de votre code, un appel synchrone d'une bibliothèque externe gaspillera tous vos efforts et réduira les performances de votre application.
3. Cache
Si vous utilisez des données qui ne changent pas fréquemment, vous devez les mettre en cache pour améliorer les performances. Par exemple, le code suivant est un exemple d'obtention du dernier message et de l'affichage:
La copie de code est la suivante:
var router = express.router ();
router.Route ('/ les derniersposts'). get (function (req, res) {
Poster.getLatest (fonction (err, poteaux) {
if (err) {
lancer err;
}
res.render ('Posts', {Posts: Posts});
});
});
Si vous ne publiez pas fréquemment, vous pouvez mettre en cache la liste des messages et les nettoyer après un certain temps. Par exemple, nous pouvons utiliser le module Redis pour atteindre cet objectif. Bien sûr, vous devez installer Redis sur votre serveur. Ensuite, vous pouvez enregistrer des paires de clés / valeur avec un client appelé node_redis. L'exemple suivant montre comment nous mettons en cache les publications:
La copie de code est la suivante:
var redis = require ('redis'),
client = redis.CreateClient (null, null, {Detect_Buffers: true}),
routeur = express.router ();
router.Route ('/ les derniersposts'). get (function (req, res) {
client.get ('Posts', fonction (err, posts) {
if (posts) {
return res.render ('Posts', {Posts: JSON.Parse (Posts)});
}
Poster.getLatest (fonction (err, poteaux) {
if (err) {
lancer err;
}
client.set ('Posts', json.stringify (Posts));
res.render ('Posts', {Posts: Posts});
});
});
});
Voir, vérifions d'abord le cache redis pour voir s'il y a des messages. Si c'est le cas, nous prenons ces listes de publication à partir du cache. Sinon, nous récupérerons le contenu de la base de données et mettons en cache les résultats. De plus, après une certaine période de temps, nous pouvons nettoyer le cache Redis afin que le contenu puisse être mis à jour.
4. Compression GZIP
L'activation de la compression GZIP aura un impact énorme sur vos applications Web. Lorsqu'un navigateur compressé GZIP demande certaines ressources, le serveur se compresse avant que la réponse ne soit renvoyée au navigateur. Si vous n'utilisez pas GZIP pour compresser vos ressources statiques, il peut prendre plus de temps au navigateur pour les obtenir.
Dans les applications express, nous pouvons utiliser le middleware express.static () intégré pour gérer le contenu statique. De plus, le contenu statique peut être compressé et traité à l'aide du middleware de compression. Voici les exemples d'utilisation:
La copie de code est la suivante:
Var compression = require ('compression');
app.use (compression ()); // Utilisez la compression
app.use (express.static (path.join (__ dirname, 'public')));
5. Si possible, rendre avec le client
Maintenant, il existe des cadres MVC / MVVM clients super polyvalents et puissants, tels que AngularJS, Ember, Meteor, etc., et il est très facile de créer une application à une seule page. Fondamentalement, il vous suffit d'exposer une API et de renvoyer une réponse JSON au client, sans rendre la page sur le serveur. Sur le client, vous pouvez organiser JSON avec des frameworks et les afficher sur l'interface utilisateur. L'envoi de réponses JSON sur le serveur peut enregistrer la bande passante et améliorer les performances, car vous n'avez pas besoin de retourner des marques de mise en page dans chaque réponse, à droite, il vous suffit de retourner Pure JSON et de les rendre sur le client.
Jetons un coup d'œil à mon tutoriel, qui consiste à exposer une API RESTful en utilisant Express 4. J'ai également écrit un autre tutoriel montrant comment combiner ces API avec AngularJS.
6. Ne stockez pas trop de données en sessions
Pour les applications de page Express typiques, les données de session sont enregistrées en mémoire par défaut. Lorsque vous économisez trop de données dans la session, cela augmentera considérablement les frais généraux du serveur. Ainsi, vous passez à une autre méthode de stockage pour enregistrer les données de session ou essayez de minimiser la quantité de données stockées en session.
Par exemple, lorsque les utilisateurs se connectent à votre application, vous pouvez enregistrer leurs ID uniquement dans la session au lieu de l'ensemble de l'objet de données utilisateur. De plus, pour les requêtes que vous pouvez obtenir des objets d'ID, vous aimeriez utiliser MongoDB ou Redis pour stocker les données de session.
7. Optimiser la requête
Supposons que vous ayez un blog et que vous souhaitez afficher les derniers articles sur votre page d'accueil. Vous pouvez obtenir des données via Mongoose comme ceci:
La copie de code est la suivante:
Post.find (). Limite (10) .exec (fonction (err, poteaux) {
// Envoie des messages au client
});
Cependant, le problème est que la méthode Find () de Mongoose interrogera tous les champs de l'objet, et de nombreux champs ne sont pas requis sur la page d'accueil. Par exemple, les commentaires enregistrent les réponses à des messages spécifiques. Nous n'avons pas besoin d'afficher les réponses de l'article, nous pouvons donc le supprimer lors de l'interrogation. Cela augmentera sans aucun doute la vitesse. La requête ci-dessus peut être optimisée comme ceci:
La copie de code est la suivante:
Post.find (). Limit (10) .exclude ('commentaires'). Exec (fonction (err, messages) {
// Envoie des messages au client
});
8. Utilisez la méthode V8 standard
Certaines opérations sur une collection, telles que la carte, la réduction et le foreach, ne soutiennent pas nécessairement tous les navigateurs. Nous pouvons résoudre certains problèmes de compatibilité du navigateur via la bibliothèque de premier plan. Mais pour Node.js, vous devez savoir exactement les opérations du moteur JavaScript V8 de Google. De cette façon, vous pouvez utiliser directement ces méthodes intégrées pour faire fonctionner la collection côté serveur.
9. Utilisez Nginx devant le nœud
Nginx est un serveur Web petit et léger qui peut réduire la charge sur votre serveur Node.js. Vous pouvez configurer des ressources statiques sur nginx plutôt que sur le nœud. Vous pouvez compresser les réponses avec GZIP sur Nginx pour réduire toutes les réponses. Donc, si vous avez un produit qui fonctionne, je pense que vous devriez vouloir utiliser nginx pour améliorer la vitesse de fonctionnement.
10. Emballage JavaScript
Enfin, vous pouvez également améliorer considérablement la vitesse de l'application de page en emballant plusieurs fichiers JS. Lorsque le navigateur rencontre l'élément <cript> dans le rendu de la page, il sera bloqué et ne continuera pas d'exécuter tant que le script ne sera pas obtenu (à moins que la propriété asynchrone ne soit définie). Par exemple, si votre page dispose de cinq fichiers JavaScript, le navigateur émettra cinq demandes HTTP distinctes pour les obtenir. Si ces cinq fichiers sont compressés et emballés en un, les performances globales seront considérablement améliorées. Il en va de même pour les fichiers CSS. Vous pouvez utiliser un outil de compilation comme Grunt / Gulp pour emballer vos fichiers de ressources.
en conclusion
Les 10 conseils ci-dessus peuvent certainement améliorer la vitesse de vos applications Web. Cependant, je sais qu'il y a place à l'amélioration et à l'optimisation. Si vous avez des conseils pour améliorer les performances, faites-le moi savoir dans la réponse.
Merci d'avoir lu!