Optimierung der Leistung von PHP-Anwendungen: Ein praktischer 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: Warum Geschwindigkeit wichtig ist?



Stellen Sie sich vor, Ihre Website braucht länger als 3 Sekunden zum Laden. Laut Google werden 53% der Nutzer die Seite verlassen, und die Conversion-Rate sinkt um 20%. Für einen PHP-Entwickler ist die Fähigkeit, eine Anwendung zu optimieren, nicht nur "gute Praxis", sondern eine Notwendigkeit. Selbst wenn Sie gerade erst anfangen, helfen Ihnen grundlegende Techniken zur Code-Beschleunigung dabei, schnelle und reaktionsfähige Projekte zu erstellen.



In diesem Artikel behandeln wir 4 Kernbereiche: von Caching und Datenbankarbeit bis hin zur Serverkonfiguration und Profilerstellung. Sie erhalten fertige Code-Beispiele und eine Checkliste zur Umsetzung.



1. Caching: Ergebnis speichern, nicht neu berechnen



Caching ist wie das Schreiben eines Spickzettels vor einer Prüfung. Anstatt komplexe Daten jedes Mal neu zu berechnen, speichern wir sie in einem schnellen Speicher.



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

Für Daten, die sich selten ändern (z. B. eine Kategorieliste oder Einstellungen), ist In-Memory-Caching ideal.



<?php// Beispiel mit Memcached$memcached = new Memcached();$memcached->addServer('localhost', 11211);

$key = 'categories_list';$categories = $memcached->get($key);

if ($categories === false) { // Daten nicht im Cache — aus der DB holen $categories = $db->query("SELECT * FROM categories")->fetchAll(); // Für 1 Stunde speichern (3600 Sekunden) $memcached->set($key, $categories, 3600);}

// $categories verwendenforeach ($categories as $cat) { echo $cat['name'];}?>


1.2. HTML-Fragment-Caching (Output Buffer)

Wenn Sie schwere Blöcke haben (Widgets, Menüs), cachen Sie das fertige HTML.



<?phpfunction getCachedWidget($widgetName, $ttl = 300) {    $cacheFile = __DIR__ . '/cache/' . md5($widgetName) . '.html';        if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $ttl) {        return file_get_contents($cacheFile);    }        ob_start();    // Code, der das Widget generiert, kommt hier hin    echo "<div class='widget'>Komplexer Inhalt...</div>";        $html = ob_get_clean();    file_put_contents($cacheFile, $html);        return $html;}

echo getCachedWidget('sidebar_menu');?>


2. Optimierung von Datenbankabfragen



Der größte Engpass in PHP-Anwendungen ist die Datenbank. Eine schlechte Abfrage kann die Leistung der gesamten Website "killen".



2.1. Indizes verwenden

Ohne einen Index muss MySQL die gesamte Tabelle scannen. Fügen Sie Indizes zu Feldern hinzu, die in WHERE, JOIN und ORDER BY verwendet werden.



-- Schlecht: Vollständiger TabellenscanSELECT * FROM users WHERE email = 'test@test.com';

-- Gut: Einen Index verwendenCREATE INDEX idx_email ON users(email);SELECT * FROM users WHERE email = 'test@test.com';


2.2. N+1-Abfragen vermeiden

Dies ist ein klassischer Fehler: Die Datenbank für jedes Element in einer Schleife abfragen.



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

// GUT: eine Abfrage mit JOIN$users = $db->query(" SELECT u.*, o.* FROM users u LEFT JOIN orders o ON u.id = o.user_id")->fetchAll();?>


2.3. Lazy Loading

Laden Sie keine Daten, die Sie gerade nicht benötigen. Verwenden Sie Paginierung oder LIMIT.



// Anstatt:$all = $db->query("SELECT * FROM logs"); // 100.000 Zeilen

// Verwenden Sie:$page = $_GET['page'] ?? 1;$limit = 20;$offset = ($page - 1) * $limit;$logs = $db->query("SELECT * FROM logs LIMIT $limit OFFSET $offset");


3. Serverkonfiguration und OPcache



Manchmal liegt das Problem nicht am Code, sondern an der PHP-Konfiguration. Die leistungsstärkste Optimierung ist

Blogs

Buchempfehlungen