10 astuces Node.js pour booster les performances
Node.js, c'est déjà pas mal, mais on peut toujours faire mieux. Voici 10 astuces pour tirer le meilleur de cette plateforme :
Double taper pour copier le contenu du code
1. Les clusters Node.js, c'est la vie
Node.js, c'est cool, mais ça tourne sur un seul cœur. Pas top quand votre serveur en a plein. La solution ? Les clusters. Regardez ce bout de code :
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Salut du worker : ' + process.pid);
}).listen(8000);
}
Boom, votre app tourne sur tous les cœurs. Magique, non ?
2. Ne bloquez pas la boucle d'événements
Node.js aime l'asynchrone. Alors évitez les trucs qui bloquent. Utilisez des fonctions asynchrones et si vous avez des calculs lourds, balancez ça dans un worker_threads. Exemple :
const { Worker, isMainThread, parentPort } = require('worker_threads');
if (isMainThread) {
const worker = new Worker(__filename);
worker.on('message', (result) => {
console.log('Résultat du worker : ', result);
});
worker.postMessage('Fais un truc lourd');
} else {
parentPort.on('message', (message) => {
// On simule un truc lourd
for (let i = 0; i < 1e9; i++);
parentPort.postMessage('C'est fait chef !');
});
}
3. Le cache, c'est cash
Moins de calculs = plus de vitesse. Utilisez du cache en mémoire ou Redis pour les données fréquemment accédées. Voilà un exemple avec Redis :
const http = require('http');
const redis = require('redis');
const client = redis.createClient();
http.createServer((req, res) => {
const key = req.url;
client.get(key, (err, result) => {
if (result) {
res.end(result);
} else {
const newData = processData(); // On fait semblant de bosser
client.set(key, newData);
res.end(newData);
}
});
}).listen(8000);
4. Compressez, vous respirerez mieux
Gzip, ça peut réduire drastiquement la taille de vos réponses. Avec Express.js, c'est facile :
const express = require('express');
const compression = require('compression');
const app = express();
app.use(compression());
app.get('/', (req, res) => {
res.send('Salut, ça gaz ?');
});
app.listen(8000);
5. JSON rapide et furieux
JSON.parse et JSON.stringify, c'est bien, mais pas ultra rapide. Essayez fast-json-parse et fast-json-stringify pour un coup de boost :
const FastJsonParse = require('fast-json-parse');
const fastJsonStringify = require('fast-json-stringify');
const jsonString = '{"foo": "bar"}';
const jsonParser = new FastJsonParse(jsonString);
const result = jsonParser.value;
const stringify = fastJsonStringify({ type: 'object', properties: { foo: { type: 'string' } } });
const jsonStringified = stringify({ foo: 'bar' });
6. Déboguer comme un pro
Le flag --inspect, c'est votre meilleur ami pour déboguer. Lancez votre app avec :
node --inspect app.js
Puis ouvrez Chrome, allez sur chrome://inspect, et boum, vous avez un super outil de débug.
7. Profiler comme un ninja
Vous voulez savoir où votre app rame ? Utilisez le flag --prof :
node --prof app.js
Ça va créer un fichier v8.log. Analysez-le avec :
node --prof-process v8.log > analyse.txt
Et vous aurez un rapport détaillé de ce qui se passe dans votre app.
8. pm2, le manager de process qui déchire
En prod, (production si tu ne savais pas (•‿•) pm2 c'est le boss. Il gère les redémarrages, le clustering, les logs... Installez-le :
npm install -g pm2
Et lancez votre app :
pm2 start app.js
9. Dépendances à jour = performances au top
Les vieux paquets, c'est comme les vieux ordinateurs, ça rame (Sauf si vous avez windows installé (θ‿θ). Vérifiez régulièrement avec :
npm outdated
Et mettez à jour avec :
npm update
10. Un code propre, c'est un code rapide
Utilisez ESLint et Prettier pour garder votre code propre et performant. Installez-les :
npm install --save-dev eslint prettier eslint-plugin-prettier eslint-config-prettier
Créez un fichier .eslintrc.json :
{
"extends": ["prettier"],
"plugins": ["prettier"],
"rules": {
"prettier/prettier": "error"
}
}
Et lancez :
npx eslint --fix .
npx prettier --write .
Voilà, avec ces 10 astuces, votre app Node.js va aller plus vite que l'éclair. N'oubliez pas de toujours mesurer les perfs avant et après vos optimisations. Parce que optimiser à l'aveugle, c'est comme coder les yeux fermés : ça peut faire mal.
Commentaires