Optimierung der Leistung von PHP-Anwendungen: Vollständiger Leitfaden

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



PHP bleibt eine der beliebtesten Sprachen für die Webentwicklung: WordPress, Laravel, Symfony und Millionen von Websites basieren darauf. Mit zunehmender Auslastung kann die Performance von PHP-Anwendungen jedoch zum Engpass werden. Langsame Seitenladezeiten verschlechtern nicht nur die Benutzererfahrung, sondern senken auch die Positionen in den Suchergebnissen (Google berücksichtigt Core Web Vitals).



In diesem Artikel behandeln wir bewährte Methoden zur PHP-Optimierung, die Ihre Anwendung beschleunigen, ohne dass Sie den gesamten Code neu schreiben müssen. Sie erfahren mehr über Caching, Interpreter-Konfiguration, Datenbankoptimierung und Profiling.



1. Caching: Der erste Schritt zur Geschwindigkeit



Caching ist die effektivste Methode, um die Antwortzeit zu verkürzen. Anstatt jedes Mal schwere Operationen auszuführen, speichern Sie das Ergebnis und liefern es aus dem Cache aus.



1.1. OpCache (PHP 7/8)



PHP ist eine interpretierte Sprache: Bei jeder Anfrage kompiliert es das Skript in Opcode (Bytecode). OpCache speichert den kompilierten Opcode im RAM und vermeidet so die erneute Kompilierung. Dies bringt eine Leistungssteigerung von 30–50%.



So aktivieren Sie es: Öffnen Sie php.ini und stellen Sie sicher, dass die Parameter wie folgt eingestellt sind:



opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2


Für die Produktion setzen Sie opcache.revalidate_freq=0 und leeren Sie den Cache manuell beim Deployment.



1.2. Daten-Caching (Redis / Memcached)



Wenn Ihre Anwendung teure Datenbankabfragen oder externe API-Aufrufe tätigt, verwenden Sie In-Memory-Speicher.



Beispiel mit Redis:



<?php$redis = new Redis();$redis->connect('127.0.0.1', 6379);

$cacheKey = 'user_profile_' . $userId;$profile = $redis->get($cacheKey);

if (!$profile) { // Teure Datenbankabfrage $profile = getUserProfileFromDB($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // TTL 1 Stunde}

$profile = unserialize($profile);


1.3. HTML-Caching (Full Page Cache)



Für statische oder selten aktualisierte Seiten (Blog, Landingpage) können Sie die fertige HTML-Ausgabe cachen. In Laravel geschieht dies über Middleware, in Symfony über den HTTP-Cache.



2. Optimierung von SQL-Abfragen und der Datenbank



Meistens ist die Datenbank der Engpass einer PHP-Anwendung. Langsame Abfragen verbrauchen Serverressourcen.



2.1. Verwenden Sie Indizes



Stellen Sie sicher, dass auf Spalten, die in WHERE, JOIN und ORDER BY verwendet werden, Indizes vorhanden sind. Überprüfen können Sie dies mit EXPLAIN SELECT ....



Schlechte Abfrage (ohne Index):



SELECT * FROM orders WHERE status = 'pending';


Gute Abfrage (mit Index):



CREATE INDEX idx_orders_status ON orders (status);SELECT * FROM orders WHERE status = 'pending';


2.2. Vermeiden Sie N+1-Abfragen



Dies ist ein klassischer ORM-Fehler: In einer Schleife werden Daten für jeden Datensatz abgerufen.



Problem (Laravel Eloquent):



$users = User::all();foreach ($users as $user) {    echo $user->profile->bio; // jedes Mal eine neue Abfrage}


Lösung (Eager Loading):



$users = User::with('profile')->get();foreach ($users as $user) {    echo $user->profile->bio; // eine Abfrage}


2.3. Paginierung statt LIMIT mit großem Offset



Bei LIMIT 10 OFFSET 100000 durchläuft MySQL trotzdem 100010 Zeilen. Verwenden Sie Cursor-basierte Paginierung (Suche über Index):



SELECT * FROM posts WHERE id > $lastId ORDER BY id ASC LIMIT 10;


3. Optimierung von Code und Architektur



Selbst bei perfekter Datenbank und Cache kann schlechter Code die

Blogs

Buchempfehlungen