Optimierung der Leistung von PHP-Anwendungen: Tipps und Beispiele

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

Die Leistung von PHP-Anwendungen ist einer der Schlüsselfaktoren für den Erfolg jedes Webprojekts. Eine langsame Website schreckt nicht nur Benutzer ab, sondern wirkt sich auch negativ auf die SEO-Positionen aus. In diesem Artikel werden wir die wichtigsten Methoden zur Optimierung von PHP-Code und Serverinfrastruktur behandeln, die Ihre Anwendung beschleunigen.

Optimierung ist keine einmalige Aktion, sondern ein fortlaufender Prozess. Beginnen wir mit den effektivsten Techniken, die den größten Leistungszuwachs bringen.



1. Daten-Caching

Caching ist eines der leistungsstärksten Werkzeuge zur Beschleunigung von PHP-Anwendungen. Anstatt jedes Mal eine Antwort von Grund auf neu zu generieren, können Sie das Ergebnis speichern und aus dem Cache ausliefern.



1.1. In-Memory-Caching (Redis/Memcached)

Verwenden Sie In-Memory-Caching-Systeme wie Redis oder Memcached. Sie eignen sich ideal zum Speichern von Ergebnissen komplexer Abfragen, Sitzungen und häufig angefragter Daten.

<?php// Beispiel für die Verwendung von Redis zum Caching$redis = new Redis();$redis->connect('127.0.0.1', 6379);

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

if ($profile === false) { // Daten nicht im Cache – schwere Abfrage ausführen $profile = getUserProfileFromDatabase($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // Cache für 1 Stunde}

$profile = unserialize($profile);?>


1.2. HTML-Ausgabe-Caching (Full Page Cache)

Für statische Seiten oder Seiten, die sich selten ändern, verwenden Sie das Caching von fertigem HTML. Dies kann mit Varnish oder dem integrierten Caching in gängigen Frameworks (z. B. Symfony HTTP Cache) realisiert werden.



2. Optimierung der Datenbankarbeit

Die Datenbank ist oft der Engpass. Die Optimierung von Abfragen und der Datenbankstruktur kann eine erhebliche Geschwindigkeitssteigerung bringen.



2.1. Verwenden Sie Indizes

Stellen Sie sicher, dass alle Spalten, die in WHERE-, JOIN- und ORDER BY-Bedingungen vorkommen, indiziert sind. Dies beschleunigt die Suche um ein Vielfaches.



2.2. Abfrageoptimierung mit EXPLAIN

Verwenden Sie vor der Ausführung einer komplexen Abfrage den Befehl EXPLAIN, um zu verstehen, wie MySQL sie ausführt. Achten Sie auf "Using filesort" oder "Using temporary" – das sind Anzeichen für eine nicht optimale Abfrage.

<?php// Schlecht: N+1 Abfragen$users = $db->query("SELECT * FROM users");foreach ($users as $user) {    $posts = $db->query("SELECT * FROM posts WHERE user_id = " . $user['id']);    // ...}

// Gut: eine Abfrage mit JOIN$users = $db->query(" SELECT u.*, p.title as post_title FROM users u LEFT JOIN posts p ON p.user_id = u.id");?>


2.3. Paginierung statt LIMIT mit großem Offset

Die Verwendung von LIMIT mit einem großen OFFSET zwingt die Datenbank, viele Zeilen zu scannen. Verwenden Sie eine cursor-basierte Paginierung (WHERE id > last_id).

<?php// Schlecht: LIMIT 100000, 20$stmt = $db->query("SELECT * FROM articles ORDER BY id LIMIT 100000, 20");

// Gut: cursor-basierte Paginierung$lastId = $_GET['last_id'] ?? 0;$stmt = $db->query("SELECT * FROM articles WHERE id > $lastId ORDER BY id LIMIT 20");?>


3. Verwendung von OPcache und Autoloading von Klassen

PHP ist eine interpretierte Sprache, und jede Anfrage erfordert die Kompilierung von Skripten. OPcache löst dieses Problem, indem es den kompilierten Code im Speicher speichert.



3.1. OPcache-Konfiguration

Stellen Sie sicher, dass OPcache aktiviert und richtig konfiguriert ist. Hier sind die optimalen Parameter für die meisten Projekte:

; php.iniopcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=2opcache.fast_shutdown=1


3.2. Korrektes Autoloading von Klassen

Verwenden Sie Composer für das Autoloading von Klassen. Dadurch werden nur die Klassen geladen, die

Blogs

Buchempfehlungen