BotStrike
BotStrike
🌙
Pourquoi ?
Commandes lentes
setCache
clearCache
Que cacher ?
Avancé
Exemple météo

⚡ Mise en cache (Caching)

Accélérer votre bot en mettant en cache les résultats des commandes fréquemment utilisées

Pourquoi utiliser le cache ?

Les commandes de votre bot doivent s'exécuter rapidement — idéalement entre 100 et 250 ms. Si une commande prend trop de temps, les utilisateurs auront une mauvaise expérience.

Le cache permet de stocker le résultat d'une commande pour le réutiliser sans la re-exécuter à chaque fois.

⚠️ Attention — Si votre code prend trop longtemps à s'exécuter, il sera interrompu par un timeout. Les commandes lentes peuvent aussi ralentir l'ensemble de votre bot.

Exemple concret : votre serveur traite 1 requête/seconde. Avec des commandes de 250 ms, il gère 4 requêtes par seconde. Mais avec une commande d'1 seconde, une seule requête est traitée, et les suivantes s'accumulent en file d'attente.

Commandes qui risquent d'être lentes

Certaines opérations sont naturellement lentes et bénéficient du cache :

  • Requêtes HTTP vers des APIs externes
  • Appels API Telegram longs (sendVideo, getChatMember, etc.)
  • Diffusion massive de messages
  • Lecture/écriture de nombreuses propriétés (plus de 20 en une commande)
  • Boucles volumineuses ou mal optimisées
⚠️ Si votre code s'exécute en plus de 300 ms, essayez de l'optimiser, de le mettre en cache, ou de l'exécuter en arrière-plan.

setCache — Activer le cache

Mettez en cache le résultat d'une commande pour une durée déterminée (en secondes).

🐍 Python
⚡ JavaScript

Cache global (pour tous les utilisateurs)

bot.sendMessage("Bonjour !")

# Mettre en cache pendant 1 heure (3600 secondes)
bot.setCache(3600)

Cache utilisateur (par personne)

bot.sendMessage("Bonjour, " + u["prenom"])

# Cache pendant 1 heure, propre à chaque utilisateur
User.setCache(3600)

Cache global (pour tous les utilisateurs)

Bot.sendMessage("Bonjour !");

// Mettre en cache pendant 1 heure
Bot.setCache(
  60 * 60  // durée en secondes = 1 heure
);

Cache utilisateur (par personne)

User.sendMessage("Bonjour, " + user.first_name);

// Cache propre à chaque utilisateur, pendant 1 heure
User.setCache(
  60 * 60
);
💡 Durées utiles : 60 = 1 min, 3600 = 1h, 86400 = 1 jour, 604800 = 1 semaine

clearCache — Vider le cache

Utile quand vos données changent et que vous voulez forcer la commande à se re-exécuter.

🐍 Python
⚡ JavaScript
# Vider le cache global d'une commande
Bot.clearCache("/macommande")

# Vider le cache utilisateur d'une commande
User.clearCache("/macommande")
// Vider le cache global d'une commande
Bot.clearCache("/macommande");

// Vider le cache utilisateur d'une commande
User.clearCache("/macommande");

Quels types de commandes peuvent être mises en cache ?

Le cache est puissant mais ne convient pas à tout. Voici les critères :

CritèreDétail
Réponse stableLe message du bot ne change pas souvent
Sans paramètresLa commande n'accepte pas de paramètres variables, ou alors ils changent rarement
Non critiqueSi une ancienne valeur est retournée, ce n'est pas grave
✅ Bons candidats : pages d'accueil, messages de bienvenue, résultats d'API stables, statistiques quotidiennes
⚠️ Mauvais candidats : soldes bancaires, données en temps réel, commandes avec paramètres utilisateur

Si votre commande ne remplit pas ces critères, essayez de la diviser en plusieurs sous-commandes. Certaines pourront être mises en cache tandis que d'autres s'exécuteront en temps réel.

Techniques avancées

Vous pouvez pré-charger le cache en arrière-plan pour des commandes longues :

🐍 Python
⚡ JavaScript

Commande /start — lance le pré-chargement

bot.sendMessage("Bienvenue dans mon bot !")

# Lancer une tâche longue en arrière-plan
# (à implémenter selon votre logique)

Exemple : afficher l'heure (avec cache)

now = time.strftime("%H:%M:%S")
bot.sendMessage("Heure : " + now)

# Cache pendant 2 minutes — l'heure ne sera mise à jour
# qu'après expiration du cache
bot.setCache(120)

Commande /start — lance le pré-chargement

Bot.sendMessage("Bienvenue dans mon bot !");

Bot.run({
  command: "/longBackgroundTask",
  run_after: 1  // exécuté en arrière-plan après 1 seconde
});

Commande /longBackgroundTask

// Effectuer les tâches longues ici...
Bot.getProperty("myJSON_1");
Bot.getProperty("myJSON_2");
// ... etc ...

// Mettre en cache pendant 1 semaine
User.setCache(
  60 * 60 * 24 * 7  // 604800 secondes
);

Exemple : afficher l'heure (avec cache)

var date = new Date();

var time = "Heure : "
  + date.getHours() + ":"
  + date.getMinutes() + ":"
  + date.getSeconds();

Bot.sendMessage(time);

Bot.setCache(120);  // cache pendant 120 secondes
💡 Astuce — Le pré-chargement en arrière-plan combine le meilleur des deux mondes : l'utilisateur obtient une réponse instantanée (depuis le cache), pendant que les données sont rafraîchies silencieusement.

🌡️ Exemple concret : cache d'une API météo

Une API météo gratuite limite souvent à quelques requêtes par minute. Le cache divise les appels par 100× — même si 1000 utilisateurs demandent la météo de Paris dans la même heure, l'API n'est appelée qu'une seule fois.

🐍 Python
⚡ JavaScript
# meteo.py — cache global 30 minutes
ville = params or "Paris"
res = HTTP.get(f"https://wttr.in/{ville}?format=j1")
temp = res["current_condition"][0]["temp_C"]
desc = res["current_condition"][0]["weatherDesc"][0]["value"]

Bot.sendMessage(f"🌡️ {ville} : {temp}°C, {desc}")

# Cache 30 minutes pour TOUS les utilisateurs
Bot.setCache(60 * 30)

Résultat utilisateur :

🌡️ Paris : 14°C, Partly cloudy
// meteo.js — cache global 30 minutes
let ville = params || "Paris";
let res = HTTP.get(`https://wttr.in/${ville}?format=j1`);
let temp = res.current_condition[0].temp_C;
let desc = res.current_condition[0].weatherDesc[0].value;

Bot.sendMessage(`🌡️ ${ville} : ${temp}°C, ${desc}`);

// Cache 30 minutes pour TOUS les utilisateurs
Bot.setCache(60 * 30);

📊 Récapitulatif des 4 niveaux de cache

FonctionPortéeUsage typique
Bot.setCache(s)Global — même réponse pour tousMétéo, FAQ, infos publiques
User.setCache(s)Par utilisateurSolde, profil, dashboard perso
Bot.clearCache(cmd)Vide le cache global d'une commandeAprès mise à jour des données
User.clearCache(cmd?)Vide le cache utilisateur (cmd ou tous)Après achat/transaction
⚠️ Important — Le cache est conservé même après un redémarrage du bot. Pour le forcer à expirer immédiatement, appelez Bot.clearCache("/macommande").