„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Tipps zur Codeoptimierung und Leistungsverbesserung in Laravel

Tipps zur Codeoptimierung und Leistungsverbesserung in Laravel

Veröffentlicht am 02.11.2024
Durchsuche:966

Tips for Code Optimization and Performance Improvement in Laravel

Laravel ist ein robustes und elegantes Framework, aber wenn Ihre Anwendung wächst, wird die Optimierung ihrer Leistung unerlässlich. Hier finden Sie eine umfassende Anleitung mit Tipps und Beispielen, die Ihnen dabei helfen, die Leistung zu verbessern und Ihre Laravel-Anwendung zu optimieren.

1. Eager Loading vs. Lazy Loading

Problem: Standardmäßig verwendet Laravel Lazy Loading, was zum „N 1-Abfrageproblem“ führen kann, bei dem mehrere Datenbankabfragen unnötig ausgelöst werden.

Optimierung: Verwenden Sie Eager Loading, um verwandte Daten in einer Abfrage zu laden, was die Leistung bei der Arbeit mit Beziehungen erheblich verbessert.

Vorher (Lazy Loading):

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

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

Nachher (Eager Loading):

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

Wichtige Erkenntnisse: Verwenden Sie immer Eager Loading, wenn Sie wissen, dass Sie verwandte Modelle benötigen.


2. Verwenden Sie Caching für teure Abfragen

Problem: Das häufige Abrufen derselben Daten (wie Benutzerlisten, Einstellungen oder Produktkataloge) kann zu Leistungsengpässen führen.

Optimierung: Zwischenspeichern der Ergebnisse teurer Abfragen und Berechnungen, um Ladezeiten und Datenbankabfragen zu reduzieren.

Vorher (kein Caching):

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

Nachher (Cache verwenden):

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

Wichtige Erkenntnisse: Verwenden Sie das Caching-System von Laravel (Redis, Memcached), um unnötige Datenbankabfragen zu reduzieren.


3. Datenbankabfragen optimieren

Problem: Ineffiziente Abfragen und ein Mangel an ordnungsgemäßer Indizierung können die Leistung drastisch beeinträchtigen.

Optimierung: Fügen Sie immer Indizes zu häufig abgefragten Spalten hinzu und verwenden Sie nur die erforderlichen Daten.

Vor:

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

Nach:

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

Wichtige Erkenntnisse: Geben Sie immer die Spalten an, die Sie benötigen, und stellen Sie sicher, dass Ihre Datenbank über eine ordnungsgemäße Indizierung für häufig abgefragte Felder verfügt.


4. Minimieren Sie die Middleware-Nutzung

Problem: Die globale Anwendung von Middleware auf jede Route kann unnötigen Overhead verursachen.

Optimierung: Wenden Sie Middleware selektiv nur dort an, wo sie benötigt wird.

Vorher (globale Middleware-Nutzung):

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

Nachher (selektive Middleware-Nutzung):

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

Wichtige Erkenntnisse: Middleware sollte nur dort eingesetzt werden, wo es notwendig ist, um Leistungseinbußen zu vermeiden.


5. Optimieren Sie die Paginierung für große Datensätze

Problem: Das gleichzeitige Abrufen und Anzeigen großer Datensätze kann zu einer hohen Speichernutzung und langsamen Antworten führen.

Optimierung: Verwenden Sie Paginierung, um die Anzahl der pro Anfrage abgerufenen Datensätze zu begrenzen.

Vorher (Alle Datensätze abrufen):

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

Nachher (mit Paginierung):

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

Wichtige Erkenntnisse: Paginieren Sie große Datensätze, um eine Überlastung der Datenbank zu vermeiden und die Speichernutzung zu reduzieren.


6. Stellen Sie Aufgaben mit langer Laufzeit in die Warteschlange

Problem: Lang andauernde Aufgaben wie das Versenden von E-Mails oder das Erstellen von Berichten verlangsamen die Anfrage-Antwort-Zeiten.

Optimierung: Verwenden Sie Warteschlangen, um Aufgaben auszulagern und sie asynchron im Hintergrund zu verarbeiten.

Vorher (synchrone Aufgabe):

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

Nachher (Aufgabe in der Warteschlange):

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

Wichtige Erkenntnisse: Verwenden Sie Warteschlangen für Aufgaben, die nicht zeitkritisch sind, um die Antwortzeiten zu verbessern.


7. Verwenden Sie Routen-, Konfigurations- und Ansichts-Caching

Problem: Wenn Routen, Konfigurationen oder Ansichten nicht zwischengespeichert werden, kann dies zu einer langsameren Leistung führen, insbesondere in Produktionsumgebungen.

Optimierung: Zwischenspeichern von Routen, Konfigurationsdateien und Ansichten für eine schnellere Leistung in der Produktion.

Beispielbefehle:

# Cache routes
php artisan route:cache

# Cache configuration files
php artisan config:cache

# Cache compiled views
php artisan view:cache

Wichtige Erkenntnis: Zwischenspeichern Sie Ihre Konfigurationen, Routen und Ansichten immer in der Produktion, um eine schnellere Anwendungsleistung zu erzielen.


8. Verwenden Sie compact(), um den Code zu bereinigen

Problem: Die manuelle Übergabe mehrerer Variablen an Ansichten kann zu ausführlichem und schwer zu verwaltendem Code führen.

Optimierung: Verwenden Sie compact(), um den Prozess der Übergabe mehrerer Variablen an eine Ansicht zu vereinfachen.

Vor:

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

Nach:

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

Wichtige Erkenntnis: Durch die Verwendung von compact() wird Ihr Code prägnanter und einfacher zu warten.


9. Verwenden Sie Redis oder Memcached für die Sitzungs- und Cache-Speicherung

Problem: Das Speichern von Sitzungen und Cache-Daten im Dateisystem verlangsamt Ihre Anwendung in Umgebungen mit hohem Datenverkehr.

Optimierung: Verwenden Sie schnelle In-Memory-Speicherlösungen wie Redis oder Memcached für eine bessere Leistung.

Beispielkonfiguration für Redis:

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

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

Wichtige Erkenntnisse: Vermeiden Sie die Verwendung des Dateitreibers für Sitzungen und Caching in der Produktion, insbesondere in Anwendungen mit hohem Datenverkehr.


10. Vermeiden Sie die Verwendung von Rohabfragen, sofern dies nicht erforderlich ist

Problem: Die Verwendung von Roh-SQL-Abfragen kann dazu führen, dass Ihr Code weniger lesbar und schwieriger zu warten ist.

Optimierung: Verwenden Sie nach Möglichkeit das Eloquent ORM oder den Query Builder von Laravel. Wenn jedoch Rohabfragen erforderlich sind, stellen Sie sicher, dass diese optimiert sind.

Vorher (Rohabfrage):

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

Nachher (mit Eloquent oder Query Builder):

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

Wichtige Erkenntnisse: Bevorzugen Sie Eloquent ORM gegenüber Rohabfragen, sofern dies nicht unbedingt erforderlich ist.


11. Verwenden Sie effiziente Protokollierungsstufen

Problem: Die ständige Protokollierung aller Daten kann zu Leistungseinbußen führen und Ihren Speicher füllen.

Optimierung: Legen Sie die richtigen Protokollebenen in der Produktion fest, um nur das Notwendige zu erfassen (z. B. Fehler und kritische Meldungen).

Beispiel:

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

Wichtige Erkenntnis: Protokollieren Sie nur das, was in der Produktion notwendig ist, um unnötige Speichernutzung und Leistungseinbußen zu vermeiden.


Letzte Gedanken

Die Optimierung der Laravel-Leistung ist für skalierbare und effiziente Anwendungen von entscheidender Bedeutung. Durch die Implementierung dieser Best Practices können Sie sicherstellen, dass Ihre Laravel-App schneller läuft, mehr Datenverkehr verarbeitet und ein besseres Benutzererlebnis bietet.

Lassen Sie mich wissen, was Sie denken, oder teilen Sie mir gerne Ihre eigenen Tipps und Tricks zur Optimierung von Laravel-Anwendungen mit!

Viel Spaß beim Codieren! ?

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/harish_kumars_9c58df6fcc/10-tips-for-code-optimization-and-performance-improvement-in-laravel-1e99?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3