10 astuces Node.js pour booster les performances

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.

  • A+
  • A-