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.
La commande tout-en-un qui précompile les configurations, routes et vues Blade en un instant.
Ne recalculez plus jamais la même donnée lourde : stockez-la en RAM via Redis avec expiration temporelle.
Utilisez select() pour ne charger que les colonnes utiles et bannissez all() au profit de paginate().
Activez OPcache en production et propulsez votre application avec FrankenPHP ou Swoole via Laravel Octane.
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 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.
Ajoutez ->index() dans vos migrations sur toutes les colonnes utilisées dans les clauses where ou orderBy.
Ne faites jamais Product::all() en production. Utilisez Product::paginate(20) pour borner la mémoire consommée.
Chargez toujours les relations avec with() pour éviter le problème N+1 qui multiplie les requêtes.
Utilisez select(['id', 'title', 'price']) au lieu de SELECT * lorsque vos tables contiennent de lourds champs texte.