Zum Inhalt springen

PHP Performance-Tipps für Produktiv-Anwendungen

Veröffentlicht am 10. Dez. 2025 | ca. 1 Min. Lesezeit |

Performance ist kein Luxus, sondern direkt geschäftsrelevant. Langsame Seiten kosten Besucher und damit Umsatz. Hier sind meine bewährten Optimierungen für PHP-Anwendungen.

OPcache richtig konfigurieren

Der OPcache ist der einfachste und wirkungsvollste Performance-Hebel. Diese Einstellungen empfehle ich für Produktivsysteme:

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.enable_file_override=1

Wichtig: validate_timestamps=0 bedeutet, dass PHP-Dateien nur nach einem Service-Restart neu geladen werden. Das ist auf Produktivsystemen gewünscht.

Datenbankabfragen optimieren

Die häufigste Ursache für langsame Anwendungen sind ineffiziente Datenbankabfragen. Typische Fehler:

// Schlecht: N+1 Problem
$orders = $orderRepository->findAll();
foreach ($orders as $order) {
    // Löst für jede Order eine weitere Query aus
    $customer = $order->getCustomer();
    echo $customer->getName();
}

// Besser: Eager Loading mit JOIN
$qb = $entityManager->createQueryBuilder();
$orders = $qb->select('o', 'c')
    ->from(Order::class, 'o')
    ->join('o.customer', 'c')
    ->getQuery()
    ->getResult();

Caching-Strategien

Ein mehrstufiges Caching-Konzept beschleunigt die Anwendung erheblich:

<?php

declare(strict_types=1);

namespace App\Service;

use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Contracts\Cache\ItemInterface;

class ProductService
{
    public function __construct(
        private readonly CacheInterface $cache,
        private readonly ProductRepository $repository,
    ) {
    }

    public function getFeaturedProducts(): array
    {
        return $this->cache->get('featured_products', function (ItemInterface $item) {
            $item->expiresAfter(3600);

            return $this->repository->findFeatured();
        });
    }
}

Preloading in PHP 7.4+

PHP 7.4 führte Preloading ein — die Möglichkeit, häufig genutzte Klassen beim Serverstart in den Speicher zu laden:

<?php
// preload.php
require __DIR__ . '/vendor/autoload.php';

// Framework-Klassen preloaden
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator(__DIR__ . '/vendor/symfony')
);

foreach ($files as $file) {
    if ($file->getExtension() === 'php') {
        opcache_compile_file($file->getPathname());
    }
}

Fazit

Performance-Optimierung beginnt mit Messungen. Tools wie Blackfire, Xdebug Profiler oder einfach Symfony's eingebaute Profiler-Toolbar helfen, die tatsächlichen Engpässe zu identifizieren. Optimieren Sie gezielt – nicht auf Verdacht.

Thomas Wunner

Thomas Wunner

Fachinformatiker für Anwendungsentwicklung mit Ausbildereignungsprüfung und über 14 Jahre Erfahrung im Aufbau skalierbarer Webanwendungen mit Symfony und Shopware. Abseits der Tastatur ist Thomas als Rettungsschwimmer in der Wasserwacht aktiv, legt als DJ auf und erkundet die Umgebung auf dem Motorrad.

Kommentare

Kommentare werden von Remark42 bereitgestellt. Beim Laden werden Daten an unseren Kommentar-Server übertragen.