⚡ Optimiser les performances d’une application Laravel : Bonnes pratiques
Laravel est un framework puissant, mais si ton application devient lente, l’expérience utilisateur en pâtit. Heureusement, il existe de nombreuses techniques pour optimiser Laravel et le rendre rapide et efficace. 🎯
Dans ce guide, nous allons voir les meilleures pratiques pour booster les performances de ton application Laravel. 🔥
1️⃣ Optimiser l’autoloading des classes
Laravel utilise Composer pour gérer ses dépendances. Optimiser l’autoloading réduit le temps de chargement.
📌 Lancer cette commande en production :
bashCopierModifiercomposer install --optimize-autoloader --no-dev
✅ Cela supprime les packages inutiles et optimise les fichiers de classe.
2️⃣ Utiliser le cache de configuration et de routes
Laravel propose plusieurs systèmes de cache pour accélérer l’exécution.
📌 Mettre en cache la configuration :
bashCopierModifierphp artisan config:cache
✅ Laravel chargera plus rapidement les fichiers de configuration.
📌 Mettre en cache les routes (uniquement pour les applications sans routes dynamiques) :
bashCopierModifierphp artisan route:cache
✅ Les routes seront chargées plus vite.
📌 Mettre en cache les vues Blade :
bashCopierModifierphp artisan view:cache
✅ Réduit le temps de compilation des vues.
📌 Vider le cache si nécessaire :
bashCopierModifierphp artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
3️⃣ Activer l’OPcache en production
OPcache permet de stocker en mémoire les fichiers PHP compilés pour éviter leur recompilation à chaque requête.
📌 Vérifie si OPcache est activé :
bashCopierModifierphp -i | grep opcache
📌 Si ce n’est pas activé, ajoute ceci dans php.ini
:
iniCopierModifieropcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
✅ Gros gain de performances ! 🚀
4️⃣ Optimiser les requêtes Eloquent
🚀 Utiliser le Lazy Loading au lieu du Eager Loading
📌 Mauvaise pratique :
phpCopierModifier$users = User::all();
foreach ($users as $user) {
echo $user->profile->bio; // Charge le profil pour chaque utilisateur !
}
🔴 Problème : Cela crée N+1 requêtes (très lent).
📌 Bonne pratique (Eager Loading) :
phpCopierModifier$users = User::with('profile')->get();
✅ Cela charge les profils en une seule requête !
📌 Sélectionner uniquement les colonnes nécessaires
📌 Éviter SELECT *
et ne récupérer que ce qui est nécessaire :
phpCopierModifier$users = User::select('id', 'name', 'email')->get();
✅ Réduit la quantité de données transférées.
📌 Utiliser le caching avec remember()
📌 Éviter les requêtes répétitives en utilisant le cache :
phpCopierModifieruse Illuminate\Support\Facades\Cache;
$users = Cache::remember('users', 60, function () {
return User::all();
});
✅ Cela stocke les résultats en cache pendant 60 minutes !
5️⃣ Utiliser Redis comme cache
Laravel utilise par défaut le cache en fichiers, mais Redis est beaucoup plus rapide.
📌 Installer Redis :
bashCopierModifiercomposer require predis/predis
📌 Configurer .env
:
envCopierModifierCACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
✅ Les sessions, le cache et les jobs seront bien plus rapides ! 🔥
6️⃣ Optimiser les jobs et les queues
Laravel permet d’exécuter les tâches en arrière-plan avec des queues (parfait pour l’envoi d’e-mails, la génération de rapports, etc.).
📌 Ne pas exécuter les jobs directement :
phpCopierModifierdispatch(new SendEmailJob($user));
📌 Utiliser un worker en production :
bashCopierModifierphp artisan queue:work --daemon
✅ Évite que les requêtes restent bloquées en attendant l’exécution des jobs.
7️⃣ Activer la mise en cache HTTP avec Laravel Response Cache
Le package spatie/laravel-responsecache permet de mettre en cache les réponses HTTP pour éviter de recalculer les pages statiques.
📌 Installation :
bashCopierModifiercomposer require spatie/laravel-responsecache
📌 Ajoute ce middleware dans app/Http/Kernel.php
:
phpCopierModifier\Spatie\ResponseCache\Middlewares\CacheResponse::class
📌 Exemple d’utilisation pour mettre en cache une route :
phpCopierModifierRoute::get('/homepage', function () {
return view('homepage');
})->middleware('cache.response');
✅ Gains de performance énormes ! 🚀
8️⃣ Minifier et combiner les fichiers CSS et JS
📌 Utiliser Laravel Mix
Dans webpack.mix.js
:
jsCopierModifiermix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.version();
Puis exécute :
bashCopierModifiernpm run prod
✅ Cela minifie et optimise les fichiers CSS et JS.
9️⃣ Activer la compression Gzip et Brotli
Sur Apache (mod_deflate) :
Ajoute ceci dans .htaccess
:
apacheCopierModifier<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
Sur Nginx :
Ajoute ceci dans nginx.conf
:
nginxCopierModifiergzip on;
gzip_types text/plain text/css application/javascript;
gzip_vary on;
✅ Réduit la taille des fichiers envoyés au navigateur.
🔮 Conclusion : Laravel ultra-rapide !
En appliquant ces optimisations, ton application Laravel sera beaucoup plus rapide 🚀 :
✅ Autoload optimisé
✅ Configuration et routes en cache
✅ OPcache activé
✅ Requêtes Eloquent optimisées
✅ Redis pour le cache et les sessions
✅ Jobs exécutés en arrière-plan
✅ Compression et minification des fichiers