"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Conseils pour l’optimisation du code et l’amélioration des performances dans Laravel

Conseils pour l’optimisation du code et l’amélioration des performances dans Laravel

Publié le 2024-11-02
Parcourir:580

Tips for Code Optimization and Performance Improvement in Laravel

Laravel est un framework robuste et élégant, mais à mesure que votre application se développe, l'optimisation de ses performances devient essentielle. Voici un guide complet avec des conseils et des exemples pour vous aider à améliorer les performances et à optimiser votre application Laravel.

1. Chargement impatient ou chargement paresseux

Problème : par défaut, Laravel utilise le chargement paresseux, ce qui peut entraîner le « problème de requête N 1 », où plusieurs requêtes de base de données sont déclenchées inutilement.

Optimisation : utilisez le chargement rapide pour charger les données associées dans une seule requête, améliorant ainsi considérablement les performances lorsque vous travaillez avec des relations.

Avant (chargement paresseux) :

// This runs multiple queries (N 1 Problem)
$users = User::all();

foreach ($users as $user) {
    $posts = $user->posts;
}

Après (chargement impatient) :

// This loads users and their posts in just two queries
$users = User::with('posts')->get();

Clé à retenir : utilisez toujours le chargement rapide lorsque vous savez que vous aurez besoin de modèles associés.


2. Utilisez la mise en cache pour les requêtes coûteuses

Problème : la récupération fréquente des mêmes données (telles que les listes d'utilisateurs, les paramètres ou les catalogues de produits) peut créer des goulots d'étranglement en termes de performances.

Optimisation : mettez en cache les résultats de requêtes et de calculs coûteux pour réduire les temps de chargement et les requêtes de base de données.

Avant (pas de mise en cache) :

// Querying the database every time
$users = User::all();

Après (en utilisant le cache) :

// Caching the user data for 60 minutes
$users = Cache::remember('users', 60, function () {
    return User::all();
});

Clé à retenir : utilisez le système de mise en cache de Laravel (Redis, Memcached) pour réduire les requêtes de base de données inutiles.


3. Optimiser les requêtes de base de données

Problème : des requêtes inefficaces et un manque d'indexation appropriée peuvent réduire considérablement les performances.

Optimisation : ajoutez toujours des index aux colonnes fréquemment interrogées et utilisez uniquement les données requises.

Avant:

// Fetching all columns (bad practice)
$orders = Order::all();

Après:

// Only fetching necessary columns and applying conditions
$orders = Order::select('id', 'status', 'created_at')
    ->where('status', 'shipped')
    ->get();

Point clé à retenir : spécifiez toujours les colonnes dont vous avez besoin et assurez-vous que votre base de données dispose d'une indexation appropriée sur les champs fréquemment interrogés.


4. Minimisez l’utilisation du middleware

Problème : l'application globale d'un middleware à chaque itinéraire peut ajouter une surcharge inutile.

Optimisation : appliquez le middleware de manière sélective uniquement là où cela est nécessaire.

Avant (utilisation globale du middleware) :

// Applying middleware to all routes
Route::middleware('logRouteAccess')->group(function () {
    Route::get('/profile', 'UserProfileController@show');
    Route::get('/settings', 'UserSettingsController@index');
});

Après (utilisation sélective du middleware) :

// Apply middleware only to specific routes
Route::get('/profile', 'UserProfileController@show')->middleware('logRouteAccess');

Points clés à retenir : le middleware ne doit être appliqué que lorsque cela est nécessaire pour éviter les baisses de performances.


5. Optimiser la pagination pour les grands ensembles de données

Problème : la récupération et l'affichage simultanés de grands ensembles de données peuvent entraîner une utilisation élevée de la mémoire et des réponses lentes.

Optimisation : utilisez la pagination pour limiter le nombre d'enregistrements récupérés par requête.

Avant (récupération de tous les enregistrements) :

// Fetching all users (potentially too much data)
$users = User::all();

Après (en utilisant la pagination) :

// Fetching users in chunks of 10 records per page
$users = User::paginate(10);

Points clés à retenir : Paginez de grands ensembles de données pour éviter de surcharger la base de données et réduire l'utilisation de la mémoire.


6. Mettre en file d'attente les tâches de longue durée

Problème : les tâches de longue durée telles que l'envoi d'e-mails ou la génération de rapports ralentissent les temps de réponse aux demandes.

Optimisation : utilisez les files d'attente pour décharger les tâches et les gérer de manière asynchrone en arrière-plan.

Avant (tâche synchrone) :

// Sending email directly (slows down response)
Mail::to($user->email)->send(new OrderShipped($order));

Après (tâche en file d'attente) :

// Queuing the email for background processing
Mail::to($user->email)->queue(new OrderShipped($order));

Point à retenir : utilisez des files d'attente pour les tâches qui ne sont pas urgentes afin d'améliorer les temps de réponse.


7. Utilisez la mise en cache de route, de configuration et de vue

Problème : le fait de ne pas mettre en cache les routes, les configurations ou les vues peut entraîner un ralentissement des performances, en particulier dans les environnements de production.

Optimisation : mettez en cache les routes, les fichiers de configuration et les vues pour des performances plus rapides en production.

Exemples de commandes :

# Cache routes
php artisan route:cache

# Cache configuration files
php artisan config:cache

# Cache compiled views
php artisan view:cache

Points clés à retenir : mettez toujours en cache vos configurations, itinéraires et vues en production pour des performances d'application plus rapides.


8. Utilisez compact() pour nettoyer le code

Problème : la transmission manuelle de plusieurs variables aux vues peut entraîner un code verbeux et difficile à gérer.

Optimisation : utilisez compact() pour simplifier le processus de transmission de plusieurs variables à une vue.

Avant:

return view('profile', [
    'user' => $user,
    'posts' => $posts,
    'comments' => $comments,
]);

Après:

return view('profile', compact('user', 'posts', 'comments'));

Points clés à retenir : L'utilisation de compact() rend votre code plus concis et plus facile à maintenir.


9. Utilisez Redis ou Memcached pour le stockage de session et de cache

Problème : le stockage des sessions et des données de cache dans le système de fichiers ralentit votre application dans les environnements à fort trafic.

Optimisation : utilisez des solutions de stockage en mémoire rapides telles que Redis ou Memcached pour de meilleures performances.

Exemple de configuration pour Redis :

// In config/cache.php
'default' => env('CACHE_DRIVER', 'redis'),

// In config/session.php
'driver' => env('SESSION_DRIVER', 'redis'),

Point clé à retenir : évitez d'utiliser le pilote de fichiers pour les sessions et la mise en cache en production, en particulier dans les applications à fort trafic.


10. Évitez d'utiliser des requêtes brutes sauf si nécessaire

Problème : l'utilisation de requêtes SQL brutes peut rendre votre code moins lisible et plus difficile à maintenir.

Optimisation : utilisez l'ORM éloquent de Laravel ou le générateur de requêtes autant que possible, mais si des requêtes brutes sont nécessaires, assurez-vous qu'elles sont optimisées.

Avant (requête brute) :

// Using raw query directly
$users = DB::select('SELECT * FROM users WHERE status = ?', ['active']);

Après (à l'aide d'Eloquent ou de Query Builder) :

// Using Eloquent ORM for better readability and maintainability
$users = User::where('status', 'active')->get();

Points clés à retenir : préférez l'ORM éloquent aux requêtes brutes, sauf si cela est absolument nécessaire.


11. Utilisez des niveaux de journalisation efficaces

Problème : tout enregistrer à tout moment peut entraîner une dégradation des performances et remplir votre espace de stockage.

Optimisation : définissez les niveaux de journalisation appropriés en production pour capturer uniquement ce qui est nécessaire (par exemple, les erreurs et les messages critiques).

Exemple:

// In .env file, set log level to 'error' in production
LOG_LEVEL=error

Point clé à retenir : enregistrez uniquement ce qui est nécessaire en production pour éviter une utilisation inutile du stockage et des baisses de performances.


Pensées finales

L'optimisation des performances de Laravel est cruciale pour des applications évolutives et efficaces. En mettant en œuvre ces bonnes pratiques, vous pouvez vous assurer que votre application Laravel s'exécute plus rapidement, gère plus de trafic et offre une meilleure expérience utilisateur.

Faites-moi savoir ce que vous pensez, ou n'hésitez pas à partager vos propres trucs et astuces pour optimiser les applications Laravel !

Bon codage ! ?

Déclaration de sortie Cet article est reproduit sur : https://dev.to/harish_kumars_9c58df6fcc/10-tips-for-code-optimization-and-performance-improvement-in-laravel-1e99?1 En cas de violation, veuillez contacter study_golang@163 .com pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3