Laravel
Laravel 11 & 10 • Chapitre 5 : Optimisation & Sécurité

Optimisation des Performances : Caches & Requêtes

Une application Laravel bien optimisée peut traiter des milliers de requêtes par seconde avec des temps de réponse inférieurs à 50 millisecondes. Découvrez la puissance de la mise en cache applicative avec Cache::remember() et les commandes d'optimisation d'Artisan.

⚡
php artisan optimize

La commande tout-en-un qui précompile les configurations, routes et vues Blade en un instant.

🧠
Cache::remember

Ne recalculez plus jamais la même donnée lourde : stockez-la en RAM via Redis avec expiration temporelle.

🎯
Requêtes Ciblées

Utilisez select() pour ne charger que les colonnes utiles et bannissez all() au profit de paginate().

🏎️
OPcache & Octane

Activez OPcache en production et propulsez votre application avec FrankenPHP ou Swoole via Laravel Octane.

Utilisation du Cache Applicatif (Redis / File)
use IlluminateSupportFacadesCache;
use AppModelsProduct;

// 1. Mise en cache de données lourdes pendant 1 heure :
// Si la clé 'produits_vedettes' existe en RAM, elle est retournée immédiatement.
// Sinon, la requête SQL est exécutée et le résultat est sauvegardé en cache !
$produits = Cache::remember('produits_vedettes', now()->addHour(), function () {
    return Product::with('category')
        ->where('is_active', true)
        ->latest()
        ->take(6)
        ->get();
});

// 2. Invalidation du cache lors d'une modification de produit :
public function update(ProductRequest $request, Product $product)
{
    $product->update($request->validated());
    
    // Vider le cache pour forcer le rafraîchissement des données
    Cache::forget('produits_vedettes');
}

// 3. Commandes Artisan de production :
// php artisan optimize        # Met en cache config, routes et vues d'un coup
// php artisan optimize:clear  # Nettoie tous les caches en cas de problème

Simulateur Benchmarker de Performance : Cache Miss vs Cache Hit

Simulation Vitesse RAM vs SQL

Testez l'appel à la méthode Cache::remember(). Le premier appel interroge la base SQL (lenteur), tandis que les suivants lisent directement depuis la mémoire cache en moins de 2 ms.

État de la clé en cache : NON EN CACHE (Vide)
EN ATTENTE 0 ms
Cliquez sur « Exécuter l'Appel HTTP » pour lancer la simulation.
Données Renvoyées :
Chiffre d'affaires : 42 850,00 €
Commandes traitées : 1 240
Panier moyen : 34,55 €
💡 Sans le cache, recalculer ces agrégats sur 100 000 lignes à chaque visite d'utilisateur saturerait votre serveur de base de données.
4 Règles d'Or pour des Requêtes SQL Ultra-Rapides
1. Indexer les clés

Ajoutez ->index() dans vos migrations sur toutes les colonnes utilisées dans les clauses where ou orderBy.

2. Toujours paginer

Ne faites jamais Product::all() en production. Utilisez Product::paginate(20) pour borner la mémoire consommée.

3. Eager Loading

Chargez toujours les relations avec with() pour éviter le problème N+1 qui multiplie les requêtes.

4. Colonnes ciblées

Utilisez select(['id', 'title', 'price']) au lieu de SELECT * lorsque vos tables contiennent de lourds champs texte.