Node.js est déjà rapide grâce à sa nature événementielle et asynchrone. Cependant, dans les réseaux modernes, il ne suffit pas d’être rapide. Si vous envisagez d'utiliser Node.js pour développer votre prochaine application Web, vous devez faire tout ce qu'il faut pour rendre votre application plus rapide, incroyablement rapide. Cet article présentera 10 astuces testées qui peuvent grandement améliorer les applications Node. Sans plus attendre, examinons-les 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 que sur la page Tableau de bord, vous souhaitiez exécuter les appels suivants :
Informations utilisateur -getUserProfile().
Activité actuelle -getRecentActivity().
Contenu de l'abonnement -getSubscriptions().
Contenu de la notification -getNotifications().
Pour obtenir ces informations, vous devez créer un middleware distinct pour chaque méthode, puis les lier à la route du tableau de bord. Mais le problème est que l’exécution de ces méthodes est linéaire, et la suivante ne démarrera qu’à la fin de la précédente. Une solution possible est de les appeler en parallèle.
Comme vous le savez, Node.js est très efficace pour appeler plusieurs méthodes en parallèle en raison de l'asynchronicité. Nous ne pouvons pas gaspiller nos ressources. Les méthodes que j'ai mentionnées ci-dessus n'ont aucune dépendance, nous pouvons donc les exécuter en parallèle. De cette façon, nous pouvons réduire la quantité de middleware et augmenter considérablement la vitesse.
Nous pouvons utiliser async.js pour gérer le parallélisme, qui est un module Node spécialement utilisé pour régler JavaScript de manière asynchrone. Le code suivant montre comment utiliser async.js pour appeler plusieurs méthodes en parallèle :
2. Asynchrone
Node.js est de par sa conception monothread. Sur cette base, le code synchrone peut obstruer l'ensemble de l'application. Par exemple, la plupart des API de système de fichiers ont leurs versions synchrones. Le code suivant illustre les opérations synchrones et asynchrones de lecture de fichiers :
// Synchrone
var content = fs.readFileSync('file.txt').toString();
3. Mise en 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 des dernières publications et de leur affichage :
router.route('/latestPosts').get(function(req, res) {
Post.getLatest(function(err, posts) {
Si (erreur) {
lancer une erreur ;
>
res.render('posts', { posts: posts });
});
});
router.route('/latestPosts').get(function(req,res){
client.get('posts', function (erreur, posts) {
Si (postes) {
Renvoie res.render('posts', { posts: JSON.parse(posts) });
>
Post.getLatest(function(err, posts) {
Si (erreur) {
lancer une erreur ;
>
client.set('posts', JSON.stringify(posts));
res.render('posts', { posts: posts });
});
});
});
4. compression gzip
L'activation de la compression gzip peut avoir un impact énorme sur votre application Web. Lorsqu'un navigateur compressé par gzip demande une ressource, le serveur compresse la réponse avant de la renvoyer au navigateur. Si vous ne compressez pas vos ressources statiques, le navigateur peut mettre plus de temps à 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 d'un middleware de compression. Voici un exemple d'utilisation :
app.use(compression()); //utiliser la compression
app.use(express.static(path.join(__dirname, 'public')));
5. Si possible, utilisez le rendu côté client
De nos jours, il existe de nombreux frameworks MVC/MVVM côté client polyvalents et puissants, tels que AngularJS, Ember, Meteor, etc., ce qui rend très facile la création d'une application d'une seule page. Fondamentalement, vous exposez simplement une API et renvoyez une réponse JSON au client sans afficher la page côté serveur. Côté client, vous pouvez utiliser des frames pour organiser JSON et les afficher sur l'interface utilisateur. L'envoi uniquement de réponses JSON sur le serveur permet d'économiser de la bande passante et d'améliorer les performances, car vous n'avez pas besoin de renvoyer le balisage de mise en page dans chaque réponse, n'est-ce pas ? Il vous suffit de renvoyer du JSON pur, puis de les restituer sur le client.
Consultez mon tutoriel sur la façon d'exposer une API RESTful avec Express 4. J'ai également écrit un autre tutoriel qui montre comment combiner ces API avec AngularJS.
6. Ne stockez pas trop de données dans les sessions
Dans une application de page Express typique, les données de session sont stockées en mémoire par défaut. Lorsque vous enregistrez trop de données dans la session, la surcharge du serveur augmente considérablement. Ainsi, soit vous passez à une autre méthode de stockage pour enregistrer les données de session, soit vous essayez de réduire la quantité de données stockées dans la session.
Par exemple, lorsqu'un utilisateur se connecte à votre application, vous pouvez enregistrer uniquement son identifiant dans la session au lieu de l'intégralité de l'objet de données utilisateur. De plus, pour les requêtes où vous pouvez obtenir l'objet par identifiant, vous souhaiterez peut-être 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 souhaitiez afficher les derniers articles sur la page d'accueil. Vous pouvez récupérer des données via Mongoose comme ceci :
8. Utilisez la méthode V8 standard
Certaines opérations sur les collections, telles que map, réduire et forEach, peuvent ne pas être prises en charge dans tous les navigateurs. Nous pouvons résoudre certains problèmes de compatibilité du navigateur grâce à la bibliothèque frontale. Mais pour Node.js, vous devez savoir exactement quelles opérations le moteur JavaScript V8 de Google prend en charge. De cette façon, vous pouvez utiliser directement ces méthodes intégrées pour opérer sur la collection côté serveur.
9. Utilisez Nginx devant Node
Nginx est un petit serveur Web léger qui peut réduire la charge sur votre serveur Node.js. Vous pouvez configurer des ressources statiques sur nginx au lieu de Node. Vous pouvez utiliser gzip pour compresser les réponses sur nginx, réduisant ainsi toutes les réponses. Donc, si vous avez un produit en cours d'exécution, je pense que vous souhaiterez utiliser nginx pour améliorer la vitesse d'exécution.
10. Emballage JavaScript
Enfin, vous pouvez également améliorer considérablement la vitesse d'application des pages en empaquetant plusieurs fichiers JS. Lorsque le navigateur rencontre l'élément