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.
Kommentare
Kommentare werden von Remark42 bereitgestellt. Beim Laden werden Daten an unseren Kommentar-Server übertragen.