
Développer des applications éco-responsables
Chaque ligne de code a un impact. Découvrez comment optimiser vos applications et sites web pour réduire leur consommation énergétique sans sacrifier la performance.

L'impact du code sur l'environnement
Chaque requête, chaque algorithme, chaque image non optimisée consomme de l'énergie. En tant que développeurs, nous avons le pouvoir de réduire significativement cet impact.
- Réduction significative possible (très variable selon les projets)
- Amélioration des performances utilisateur
- Réduction des coûts d'infrastructure
Choisir le bon langage
Le choix du langage de programmation a un impact direct sur la consommation énergétique. Tous les langages ne se valent pas en termes d'efficacité énergétique.
Comparaison énergétique des langages
Consommation énergétique relative (base 1.0 = C) - Source : Pereira et al., SLE 2017
Transcription du graphique de comparaison énergétique
C (langage compilé) : Consommation énergétique de référence = 1.0x (la plus efficace)
Rust : 1.03x - Performance quasi-identique au C avec sécurité mémoire garantie
C++ : 1.34x - Légèrement plus énergivore que C mais toujours très efficient
Java : 1.98x - Presque 2x plus énergivore, mais très utilisé en entreprise
JavaScript (Node.js) : 4,45x - environ 4 fois plus énergivore, impact significatif à grande échelle
Python : 75.88x - 76 fois plus énergivore ! Idéal pour prototypage mais à optimiser en production
Recommandation : Choisir le langage selon le contexte. Pour les calculs intensifs ou services haute-fréquence, privilégier les langages compilés (C, Rust, C++). Pour le développement rapide ou les scripts, Python reste acceptable si utilisé judicieusement.
Compilés, très performants. Idéaux pour systèmes critiques, calculs intensifs, IoT.
Bon compromis performance/productivité. Parfaits pour APIs, microservices, backend.
Acceptable pour web. Optimiser avec TypeScript et bundlers modernes.
75x plus énergivores que C. À utiliser pour prototypage, scripts, mais optimiser en production.
Utilisez Python pour le développement rapide, mais réécrivez les parties critiques en Rust ou C++ pour la production. Ou utilisez PyPy (JIT compiler) pour améliorer les performances.
Optimiser les algorithmes
La complexité algorithmique a un impact exponentiel sur la consommation. Un algorithme O(n²) effectue 1 000x plus d'opérations qu'un O(n) sur 1000 éléments (1 000 000 contre 1 000, voir le tableau ci-dessous).
Chargement du graphique…
Traiter uniquement les données nécessaires
Chaque octet transféré consomme de l'énergie. La règle d'or : ne charger que ce qui est vraiment nécessaire.
// À éviter : charger toute la table
const users = await db.users.findAll()
// À éviter : requête N+1
users.forEach(user => {
const posts = await db.posts
.findByUserId(user.id)
})
// À éviter : tout envoyer au client
res.json(users) // 10 MB de données// Mieux : pagination + sélection
const users = await db.users.findMany({
select: { id: true, name: true, email: true },
take: 20,
skip: page * 20
})
// Mieux : jointure optimisée
const users = await db.users.findMany({
include: { posts: true }
})
// Mieux : compression
res.json(users) // 150 KB compresséCôté serveur
- Pagination : Limiter à 20-50 résultats par page
- Sélection de champs : Ne renvoyer que les colonnes nécessaires
- Compression : Gzip/Brotli pour réduire de l'ordre de 70-90 %
- Cache : Redis/Memcached pour données fréquentes
Côté client
- Lazy loading : Charger au scroll (infinite scroll)
- GraphQL : Requêtes précises, moins d'over-fetching (attention tout de même aux requêtes profondes et au problème N+1)
- Cache navigateur : Service Workers, localStorage
- Debouncing : Limiter les requêtes (recherche, scroll)
Optimiser les médias
Les images et vidéos représentent souvent près de la moitié du poids des pages web. Leur optimisation est cruciale pour réduire la consommation.
Chargement du graphique…
Chargement du graphique…
Images
- • Utiliser WebP ou AVIF (environ 30 % plus léger que JPEG à qualité égale)
- • Lazy loading avec loading="lazy"
- • Responsive images avec srcset
- • Compression adaptée (80-85 % qualité)
- • SVG pour icônes et logos
- • PNG non compressé pour photos
- • Images plus grandes que l'affichage
- • Charger toutes les images d'un coup
- • GIF animés (utiliser vidéo)
- • Images non optimisées (> 200 KB)
Vidéos
Streaming adaptatif : HLS ou DASH pour ajuster la qualité selon la connexion
Compression : H.265 (HEVC) ou AV1 pour réduire de l'ordre de 50 % vs H.264
Lazy loading : Ne charger que quand visible
Pas d'autoplay : Laisser l'utilisateur décider (une vidéo lancée toute seule consomme pour rien)
Exemple illustratif : optimisation d'une page produit
• Avant : 12 images PNG, 4.2 MB, 6.5s de chargement
• Après : 12 images WebP + lazy loading, 580 KB, 1.2s de chargement
→ Réduction de 86 % du poids et 82 % du temps de chargement
Cas particulier du Machine Learning
L'IA et le ML sont extrêmement énergivores. Entraîner GPT-3 a émis 552 t CO₂e (Patterson et al., 2021), soit l'équivalent des émissions annuelles d'environ 120 voitures.
- Utiliser des modèles pré-entraînés
Transfer learning plutôt que tout réentraîner
- Optimiser la taille des modèles
Pruning, quantization, distillation (MobileNet, TinyBERT)
- Inférence locale quand possible
Edge computing, modèles on-device (TensorFlow Lite)
- Batch processing
Grouper les requêtes plutôt qu'une par une
- Choisir des datacenters verts
Privilégier les régions avec énergies renouvelables
Parfois, des règles simples ou des algorithmes classiques suffisent.
- • MobileNet au lieu de ResNet
- • DistilBERT au lieu de BERT
- • un petit modèle spécialisé au lieu d'un grand modèle généraliste
Stocker les résultats fréquents pour éviter de recalculer
Utiliser MobileNet au lieu de ResNet pour la classification d'images réduit fortement la consommation (jusqu'à ~98 %, ordre de grandeur Google) avec une précision similaire.
CDN et infrastructure distribuée
Un CDN (Content Delivery Network) réduit la distance entre l'utilisateur et les données, diminuant ainsi la latence et la consommation énergétique.
- Latence réduite grâce à la proximité géographique (40-60 % plus rapide selon les fournisseurs, ordre de grandeur)
- Moins de bande passante sur le serveur origine
- Cache intelligent pour contenus statiques
- Réduction CO₂ par optimisation des routes réseau
- Cloudflare
100 % énergies renouvelables, gratuit pour petits sites
- Vercel Edge Network
Optimisé pour Next.js, déploiement automatique
- Bunny CDN
Européen, RGPD compliant, très performant
- Images, CSS, JavaScript
- Fonts, icônes, logos
- Vidéos, fichiers audio
- Documents PDF, archives
- Données personnelles
- Contenu temps réel
// next.config.js - Configuration Vercel Edge
module.exports = {
images: {
domains: ['cdn.example.com'],
formats: ['image/avif', 'image/webp'], // Formats modernes
deviceSizes: [640, 750, 828, 1080, 1200], // Responsive
},
// Cache headers pour contenus statiques
async headers() {
return [
{
source: '/images/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable', // 1 an
},
],
},
{
source: '/_next/static/:path*',
headers: [
{
key: 'Cache-Control',
value: 'public, max-age=31536000, immutable',
},
],
},
]
},
}Scalabilité intelligente
Adapter automatiquement les ressources à la charge réelle évite le gaspillage énergétique des serveurs surdimensionnés qui tournent à vide.
- • Dimensionnés pour le pic de charge
- • Tournent à 10-30 % en moyenne
- • Gaspillage énergétique 70-90 % (ordre de grandeur)
- • Coût fixe élevé
- • Ressources adaptées en temps réel
- • Scale to zero quand pas d'usage
- • Économies possibles (très variables selon l'usage réel)
- • Paiement à l'usage réel
Serverless / FaaS
- AWS Lambda, Vercel Functions : Exécution à la demande
- Cloudflare Workers : Edge computing ultra-léger
- Idéal pour : APIs, webhooks, tâches ponctuelles
Containers + Kubernetes
- Horizontal Pod Autoscaler : Ajuste le nombre de pods
- Vertical Pod Autoscaler : Ajuste CPU/RAM
- Idéal pour : Applications complexes, microservices
Mise en cache multi-niveaux
- CDN : Cache edge pour contenus statiques
- Redis : Cache applicatif pour données fréquentes
- Database query cache : Évite les requêtes répétées
Optimisation temporelle
- Tâches lourdes hors pics : Éviter les heures de pointe du réseau et des datacenters (surtout économique, peu d'effet carbone en France)
- Batch processing : Grouper les traitements
- Régions vertes : Choisir datacenters avec énergies renouvelables
Performance & Algorithmes
Données
Médias
Infrastructure
IA / ML
Chaque optimisation compte
En appliquant ces bonnes pratiques, vous pouvez réduire de l'ordre de 30 à 70 % la consommation énergétique de vos applications tout en améliorant leur performance.
Quand on code un site ou une app, on pense pas forcément à la conso électrique, mais en vrai, c'est un vrai sujet. Voici quelques trucs simples (ou pas trop) pour limiter l'impact :
Optimiser les algo
Pas besoin de boucles qui tournent dans le vide ou d'un tri maison mal foutu. Un algo plus propre = moins de cycles CPU = moins d'énergie cramée.
Choisir les bons langages / libs
Certains langages sont un peu gloutons (coucou JS sur le backend quand c'est pas nécessaire). Parfois du Rust, Go ou même du C++ pour les trucs lourds, c'est plus sobre que du Python partout.
Traiter que les données utiles
Filtrer avant d'envoyer à la base, ne charger que ce que l'utilisateur voit. Éviter un gros SELECT * FROM table_de_10Go évite de mobiliser inutilement le serveur.
Machine learning
Entraîner un modèle pour une prédiction triviale est souvent inutile. Réutiliser des modèles pré-entraînés ou simplifier les datasets, c'est déjà un gros gain.
Optimiser les médias
Compresser les images, utiliser du webp/avif, virer les vidéos autoplay, charger le nécessaire. Une animation de 10 Mo pour un simple bouton alourdit inutilement la page.
CDN et cache
Servir le contenu depuis un CDN proche des users évite plein de transfert réseau inutile. Et le cache navigateur, c'est pas que pour la perf, c'est aussi moins d'énergie consommée.
Scalabilité raisonnée
Scaler automatiquement c'est cool, mais faut pas lancer 10 serveurs à vide juste "au cas où". Une infra bien calibrée consomme moins.
Front plus léger
Éviter les frameworks lourds pour un site vitrine : HTML, CSS et JavaScript vanilla suffisent souvent. Chaque kilo de code JS téléchargé par des milliers d'utilisateurs = conso multipliée.
Le truc à retenir
En résumé, coder plus « vert » n'est pas plus difficile : c'est surtout coder plus sobrement. En général, tout ce qui rend une application plus rapide la rend aussi plus économe.