Profilierung von PHP-Code: Engpässe finden und die Website beschleunigen

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 Ihr PHP-Code langsam läuft?

Jeder Entwickler kennt die Situation, wenn eine PHP-Website anfängt zu trödeln. Seiten laden 5-10 Sekunden, die Datenbank "stürzt ab" und der Server kämpft mit der Last. Meistens liegt das Problem nicht an der Hardware, sondern am Code – an sogenannten "Engpässen" (bottlenecks).

Profiling ist der Prozess der Datenerfassung darüber, wie viel Zeit und Speicher jeder Teil Ihres Skripts verbraucht. Ohne Profiling arbeiten Sie blind und raten, was genau die Anwendung verlangsamt. In diesem Artikel schauen wir uns an, wie Sie Engpässe in PHP-Code mit modernen Tools finden und beheben.



1. Grundlegende Werkzeuge für PHP-Profiling

Es gibt mehrere bewährte Tools für das Profiling von PHP. Betrachten wir die beliebtesten:



1.1. Xdebug – der Klassiker des Profilings

Xdebug ist eine Erweiterung für PHP, die leistungsstarke Debugging- und Profiling-Funktionen bietet. Es erzeugt Trace-Dateien, die mit speziellen Dienstprogrammen (z. B. KCacheGrind oder Webgrind) analysiert werden können.

Installation von Xdebug (Ubuntu/Debian):

sudo apt install php-xdebugsudo phpenmod xdebug

Konfiguration in php.ini:

xdebug.mode = profilexdebug.output_dir = /tmp/profilingxdebug.profiler_output_name = cachegrind.out.%t.%p

Danach erstellt jede Anfrage eine Profildatei im Ordner /tmp/profiling. Sie kann in KCacheGrind (Linux) oder QCacheGrind (Windows/Mac) geöffnet werden.



1.2. Blackfire.io – Cloud-Profiler

Blackfire ist ein kommerzieller Dienst von SensioLabs (den Entwicklern von Symfony). Er bietet eine benutzerfreundliche Weboberfläche, CI/CD-Integration und automatische Optimierungsempfehlungen.

Installation via Composer:

composer require blackfire/php-sdk

Beispiel zur Verwendung im Code:

<?php$probe = Blackfire::createProbe();// Ihr Code$probe->close();?>

Blackfire zeigt nicht nur die Ausführungszeit, sondern auch die Anzahl der SQL-Abfragen, Funktionsaufrufe und den Speicherverbrauch. Ideal für große Projekte.



1.3. Integrierte PHP-Funktionen

Für eine schnelle Diagnose können integrierte Funktionen verwendet werden:

  • microtime(true) – Messung der Ausführungszeit eines Codeabschnitts.
  • memory_get_usage() – aktueller Speicherverbrauch.
  • memory_get_peak_usage() – Spitzen-Speicherverbrauch.

Beispiel:

<?php$start = microtime(true);// Ihr Code$time = microtime(true) - $start;echo "Ausgeführt in: " . round($time, 4) . " Sek.";?>


2. Typische Engpässe in PHP-Code

Nachdem Sie den Profiler eingerichtet haben, gilt es zu wissen, worauf Sie achten müssen. Hier sind die häufigsten Probleme:



2.1. N+1 Datenbankabfragen

Das ist ein Klassiker: In einer Schleife werden zugehörige Daten mit einzelnen Abfragen abgerufen. Beispiel für schlechten Code:

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

Lösung: Eine Abfrage mit JOIN:

<?php$data = $db->query("SELECT u.*, p.* FROM users u LEFT JOIN posts p ON u.id = p.user_id");?>


2.2. Nicht optimale Schleifen

Verschachtelte Schleifen mit großen Arrays sind Performance-Killer. Beispiel:

<?phpforeach ($bigArray as $outer) {    foreach ($bigArray as $inner) {        // Komplexität O(n²)    }}?>

Verwenden Sie Hash-Tabellen (assoziative Arrays) zur Beschleunigung der Suche:

<?php$map = [];foreach ($bigArray as $item) {    $map[$item['id']] = $item;}?>


2.3. Übermäßige Nutzung der Klassen-Autoloading

Blogs

Buchempfehlungen