Optimierung der Leistung von PHP-Anwendungen: Ein Leitfaden für Einsteiger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung

\n

Eine langsame PHP-Anwendung bedeutet nicht nur verlorene Sekunden Wartezeit, sondern auch enttäuschte Benutzer, niedrigere Positionen in den Suchergebnissen und eine erhöhte Serverlast. Glücklicherweise kann selbst ein unerfahrener Entwickler die Leistung seines Codes erheblich verbessern, ohne sich in komplexe Systemeinstellungen vertiefen zu müssen. In diesem Artikel werden wir grundlegende, aber effektive Methoden zur Optimierung von PHP-Anwendungen untersuchen, die Ihrer Website oder Ihrem Webdienst helfen, schneller und stabiler zu laufen.

\n

Wir werden vier Schlüsselbereiche betrachten: Daten-Caching, Optimierung der Datenbankarbeit, effizientes Speichermanagement und die Nutzung moderner PHP-Funktionen. Jeder Abschnitt wird von praktischen Codebeispielen begleitet.

\n\n

Caching: Ihr wichtigstes Werkzeug zur Beschleunigung

\n

Caching bedeutet, die Ergebnisse teurer Operationen für die Wiederverwendung zu speichern. Anstatt jedes Mal eine Seite zu generieren oder eine komplexe SQL-Abfrage auszuführen, liefern Sie eine vorab gespeicherte Kopie aus.

\n\n

In-Memory-Caching mit Memcached oder Redis

\n

Der schnellste Weg zum Caching ist die Verwendung von In-Memory-Speichern wie Memcached oder Redis. Sie speichern Daten im Arbeitsspeicher, was einen Abruf in Mikrosekunden ermöglicht.

\n

Beispiel für einfaches Caching eines Datenbankabfrageergebnisses mit Memcached:

\n
<?php\n$memcached = new Memcached();\n$memcached->addServer('localhost', 11211);\n\n$cacheKey = 'user_profile_123';\n$userData = $memcached->get($cacheKey);\n\nif ($userData === false) {\n    // Daten sind nicht im Cache – führen Sie die schwere Abfrage aus\n    $userData = getUserFromDatabase(123);\n    // Speichern Sie es für 10 Minuten (600 Sekunden) im Cache\n    $memcached->set($cacheKey, $userData, 600);\n}\n\necho $userData['name'];\n?>
\n\n

Caching ganzer HTML-Seiten

\n

Für statische oder sich selten ändernde Seiten können Sie die fertige HTML-Ausgabe zwischenspeichern. Dies entlastet den PHP-Interpreter und den Webserver.

\n
<?php\n$cacheFile = 'cache/index.html';\n$cacheTime = 3600; // 1 Stunde\n\nif (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) {\n    // Geben Sie die gecachte Seite aus\n    readfile($cacheFile);\n    exit;\n}\n\n// Starten Sie die Ausgabepufferung\nob_start();\n\n// ... Ihr normaler PHP-Code, der die Seite generiert ...\n\n$html = ob_get_clean();\nfile_put_contents($cacheFile, $html);\necho $html;\n?>
\n\n

Optimierung der Datenbankarbeit

\n

Die Datenbank ist der häufigste Engpass in den meisten PHP-Anwendungen. Einige einfache Änderungen können einen enormen Geschwindigkeitsschub bringen.

\n\n

Verwenden Sie Indizes

\n

Ohne Indizes führt MySQL einen vollständigen Tabellenscan (full table scan) durch, was bei großen Datenmengen extrem langsam ist. Fügen Sie Indizes zu Feldern hinzu, die in WHERE-, JOIN- und ORDER BY-Bedingungen verwendet werden.

\n
-- Beispiel: Bestelltabelle\nCREATE INDEX idx_user_id ON orders(user_id);\nCREATE INDEX idx_created_at ON orders(created_at);
\n\n

Vermeiden Sie N+1-Abfragen

\n

Dies ist ein klassischer Fehler: In einer Schleife führen Sie für jedes Element eine Datenbankabfrage durch. Verwenden Sie stattdessen eine einzelne Abfrage mit JOIN oder einer Unterabfrage.

\n

Schlechtes Beispiel (N+1):

\n
<?php\n$users = $db->query("SELECT * FROM users");\nforeach ($users as $user) {\n    // Für jeden Benutzer wird eine separate Abfrage durchgeführt\n    $orders = $db->query("SELECT * FROM orders WHERE user_id = " . $user['id']);\n}\n?>
\n\n

Gutes Beispiel (eine Abfrage):

\n
<?php\n$usersWithOrders = $db->query("\n    SELECT u.*, o.* \n    FROM users u \n    LEFT JOIN orders o ON u.id = o.user_id\n");\n?>
\n\n

Begrenzen Sie die Datenauswahl

\n

Fragen Sie niemals alle Zeilen ab, wenn Sie nur 10 benötigen. Verwenden

Blogs

Buchempfehlungen