
Laravel Performance optimieren: Tuning für High-Speed Applikationen

Sie müssen die Laravel Performance optimieren, weil Ihre Applikation unter der Last der Nutzerzahlen in die Knie geht? Herzlichen Glückwunsch – das bedeutet, Ihr Projekt ist erfolgreich! Doch Skalierung bringt Schmerzen mit sich. Wenn eine WordPress-Seite langsam ist, installiert man ein Caching-Plugin. Wenn eine individuelle Laravel-Applikation langsam ist, muss man in den Maschinenraum des Codes.
Laravel ist das eleganteste PHP-Framework der Welt. Es macht Entwicklern das Leben unglaublich leicht. Genau diese Leichtigkeit verführt jedoch oft zu ineffizientem Code. Ein einfacher Befehl im Controller kann im Hintergrund Hunderte versteckte Datenbankabfragen auslösen. Wenn wir die Laravel Performance optimieren wollen, reicht Server-Tuning allein nicht mehr aus. Wir müssen die Architektur der Applikation entlasten. In diesem Guide gehen wir die vier mächtigsten Strategien durch, um Ihre App von "träge" auf "Echtzeit" zu beschleunigen.

1. Eloquent zähmen: Das berüchtigte N+1 Problem
Der mit Abstand größte Flaschenhals in 90% aller Laravel-Projekte ist das ORM (Eloquent). Es ist so einfach zu bedienen, dass man vergisst, was es unter der Haube tut. Stellen Sie sich vor, Sie zeigen 50 Blogposts an und wollen zu jedem den Namen des Autors ausgeben.
Der Fehler (Lazy Loading):
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name;
}Das Resultat: Laravel macht 1 Abfrage für die Posts und dann 50 weitere Abfragen (für jeden Autor eine). Insgesamt 51 Queries (N+1). Das zerstört Ihren TTFB.
Die Lösung (Eager Loading):
$posts = Post::with('author')->get();Das Resultat: Laravel macht genau 2 Abfragen. Einmal für die Posts und einmal für alle verknüpften Autoren. Die Ausführungszeit sinkt drastisch. Tipp: Nutzen Sie in der Entwicklung das Paket Laravel Debugbar, um diese versteckten Queries sofort zu sehen!

2. Die Macht des Zwischenspeichers (Caching)
Laravel muss bei jedem Aufruf die Routen, Konfigurationen und Views (Blade-Templates) neu einlesen. Das kostet CPU-Zyklen. Wenn wir die Laravel Performance optimieren, müssen wir dem Framework diese Start-Arbeit abnehmen.
Für die Produktionsebene (Live-Server) sind folgende Artisan-Befehle absolute Pflicht:
php artisan config:cache(Speichert alle Config-Dateien in einer Datei)php artisan route:cache(Beschleunigt das Router-System massiv)php artisan view:cache(Kompiliert alle Blade-Templates vor)
Datenbank-Caching: Nutzen Sie Redis statt MySQL für temporäre Daten. Wenn Sie auf der Startseite Top-Listen oder Statistiken anzeigen, fragen Sie diese nicht bei jedem Seitenaufruf ab. Speichern Sie das Ergebnis in Redis:
$stats = Cache::remember('dashboard_stats', 60, function () {
return DB::table('logs')->count();
});3. Laravel Octane: Der Game-Changer (Installations- & Praxis-Guide)
Normalerweise "stirbt" PHP nach jedem Request. Bei jedem neuen Klick muss das gesamte Laravel-Framework (ca. 30 MB an Dateien) neu in den Speicher geladen (gebootet) werden. Das dauert etwa 30 bis 50 Millisekunden.
Hier kommt Laravel Octane (basierend auf Swoole oder RoadRunner) ins Spiel. Octane bootet Laravel genau einmal und hält es im Arbeitsspeicher (RAM) permanent am Leben. Eingehende Requests werden direkt an die fertige Applikation weitergeleitet. Der Effekt ist atemberaubend: Response-Zeiten fallen oft auf unter 2 Millisekunden.

Wer Laravel Octane installiert, verlässt die klassische Welt von PHP. Normalerweise wird bei jedem Klick eines Nutzers das gesamte Laravel-Framework neu in den Arbeitsspeicher geladen (Bootstrapping), der Request wird verarbeitet, und danach wird alles wieder gelöscht.
Octane ändert das. Es bootet Ihre Applikation nur ein einziges Mal und hält sie permanent im Arbeitsspeicher. Anfragen werden in Bruchteilen von Millisekunden verarbeitet. Das Ergebnis ist eine Applikation, die sich so schnell anfühlt wie eine Go- oder Node.js-Anwendung.
Hier ist Ihre Schritt-für-Schritt-Anleitung, um den Turbo zu zünden.
Voraussetzungen & Die Wahl des Motors
Bevor wir installieren, müssen wir uns für einen "Application Server" entscheiden, der PHP im Speicher hält. Octane unterstützt drei hervorragende Technologien:
RoadRunner: In Go geschrieben. Extrem schnell, sehr einfach zu installieren (bringt seine eigene Binary mit). Unsere Empfehlung für den Start.
Swoole: Eine PHP-Erweiterung (C++). Bietet die meisten Features (wie asynchrone Tasks), ist aber bei der Server-Konfiguration etwas aufwändiger.
FrankenPHP: Der neueste Star (basiert auf dem Caddy-Webserver). Modern und sehr performant.
Voraussetzung: PHP 8.1 oder höher.
Installation (Beispiel mit RoadRunner)
Öffnen Sie Ihr Terminal im Root-Verzeichnis Ihres Laravel-Projekts.
Schritt 1: Octane via Composer laden
composer require laravel/octaneSchritt 2: Octane installieren
php artisan octane:installLaravel fragt Sie nun, welchen Server Sie nutzen möchten. Wählen Sie in diesem Beispiel roadrunner [1].
Schritt 3: RoadRunner Binary herunterladen Da RoadRunner ein separates Programm ist, laden wir es direkt über Composer herunter:
composer require spiral/roadrunner-cli
./vendor/bin/rr get-binaryDas war’s! Die Grundinstallation ist abgeschlossen.
Konfiguration (config/octane.php)
Nach der Installation finden Sie die Datei config/octane.php. Hier stellen Sie das Verhalten des Servers ein. Die wichtigsten Parameter:
workers: Wie viele parallele Prozesse sollen laufen? (Faustregel: Anzahl Ihrer CPU-Kerne).max_requests: Nach wie vielen Requests soll ein Worker neu gestartet werden? (Standard: 500). Das ist ein Sicherheitsnetz gegen Memory Leaks.listeners: Hier definieren Sie, welche Dienste nach jedem Request zurückgesetzt werden müssen (dazu gleich mehr unter "Die große Falle").
Octane starten
Um den Server lokal für die Entwicklung zu starten, nutzen Sie den Watch-Modus. Dieser startet den Server automatisch neu, wenn Sie eine PHP-Datei ändern (ansonsten würden Änderungen nicht sichtbar werden, da der alte Code ja im RAM hängt).
php artisan octane:start --watchIhre Applikation ist nun rasend schnell unter http://localhost:8000 erreichbar.
ACHTUNG: Die große Octane-Falle (State Persistence)
Das ist der wichtigste Teil dieses Guides, um Octane richtig zu nutzen. Da Ihre Applikation im Speicher bleibt, bleiben auch Ihre Variablen im Speicher.
Das Problem: Singletons und statische Variablen
In klassischem PHP ist es egal, wenn Sie eine statische Variable am Ende eines Requests nicht leeren – sie wird ja eh gelöscht. Bei Octane sieht der nächste Nutzer plötzlich die Daten des vorherigen Nutzers!
Falsch (Gefahr von Daten-Leaks):
class UserStats {
public static $viewCount = 0;
public function track() {
self::$viewCount++;
return self::$viewCount;
}
}Ergebnis bei Octane: User A ruft die Seite auf, Counter ist 1. User B ruft die Seite auf, Counter ist 2. User B sieht die Daten von User A!
Die Lösung: Dependency Injection und Event Listener
Nutzen Sie den Laravel-Container (Dependency Injection) für Singletons. Laravel Octane weiß, welche Core-Komponenten es nach einem Request zurücksetzen muss.
Wenn Sie eigene Singletons in einem ServiceProvider binden, müssen Sie Octane sagen, dass es diese nach dem Request "flushen" (leeren) soll. Das tun Sie in der config/octane.php:
'listeners' => [
RequestTerminated::class => [
FlushMyCustomSingleton::class,
],
],Faustregel für Octane-Entwickler:
Vermeiden Sie das Keyword
staticin Controllern und Services.Wenn Sie den Service-Container (
app()->singleton(...)) für zustandsbehaftete Daten nutzen, registrieren Sie einen Reset-Listener.Der
Request(Inputs des Nutzers) ist immer sicher, da Laravel diesen pro Klick neu generiert.
Octane in Produktion (Live-Server)
Auf einem echten Server (z.B. Ubuntu mit Nginx) lassen Sie Octane über den Prozess-Manager Supervisor oder Systemd laufen, damit es sich bei einem Absturz automatisch neu startet.
Ein typischer Nginx-Proxy-Eintrag für Octane: Anstatt Anfragen an PHP-FPM zu senden, schickt Nginx die Anfragen an den internen Octane-Port (meist 8000).
Nginx
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}Laravel Octane ist keine "One-Click-Lösung" für schlechten Code, sondern ein Architektur-Wechsel. Wenn Sie die Regeln des persistenten Arbeitsspeichers verstehen, katapultieren Sie Ihre Applikation auf ein Leistungsniveau, das mit traditionellem PHP vorher unerreichbar war.
4. Lass den Nutzer nicht warten (Queues)
Der Nutzer klickt auf "Bestellen". Jetzt muss Laravel eine Rechnung als PDF generieren, drei E-Mails verschicken und ein Bild komprimieren. Wenn Sie das alles im Controller machen, starrt der Nutzer 5 Sekunden auf ein Lade-Symbol.
Die Lösung: Queues (Warteschlangen). Schieben Sie schwere Aufgaben in den Hintergrund. Laravel gibt dem Nutzer sofort das Feedback: "Erfolgreich bestellt!" (in 0,1 Sekunden). Im Hintergrund arbeitet ein Worker (über Laravel Horizon) ganz in Ruhe die PDF-Generierung und den E-Mail-Versand ab.

Fazit: Performance als Kultur
Wer die Laravel Performance optimieren möchte, muss aufhören, an der Hardware zu schrauben, und anfangen, die Software zu verstehen. Eager Loading, Redis-Caching, Queues und Laravel Octane sind keine "Nice-to-haves" – sie sind die Grundpfeiler moderner Web-Applikationen.
Mit diesem Artikel beenden wir unsere "Web Performance Masterclass". Wir haben die Reise gestartet bei der Diagnose, sind über die Core Web Vitals und die Frontend-Optimierung von Bildern und Skripten bis tief in den Server-Code von Contao und Laravel vorgedrungen.
Das wichtigste Learning aus all diesen Teilen: Performance ist kein Zustand, den man einmal erreicht. Performance ist ein Prozess. Das Internet wird schneller, die Standards steigen. Bleiben Sie dran!
Teil der Serie
Website Performance Masterclass
Website Performance Masterclass: Der ultimative Guide zur blitzschnellen Seite Pillar
Warum ist meine Website langsam? Die 7 häufigsten Ursachen & die Diagnose
Core Web Vitals einfach erklärt: Was Entwickler und Kunden wissen müssen
LCP, CLS & INP optimieren: So beheben Sie die nervigsten Fehler
Bilder richtig optimieren für moderne Websites: Scharf, aber schlank
Server vs. Frontend Performance: Wo liegt die Bremse wirklich?
Lighthouse vs. reale Nutzerdaten: Warum ein 100er Score lügen kann
Website schneller machen: 10 Tipps für den sofortigen Turbo
Contao Performance optimieren: Der Speed-Guide für das CMS
Laravel Performance optimieren: Tuning für High-Speed Applikationen
Häufig gestellte Fragen (FAQ)
Gratulation! Sie sind am Ziel.
Sie haben alle 9 Teile der "Web Performance Masterclass" gelesen. Sie verfügen nun über das Wissen, das 95% aller Website-Betreiber fehlt. Sie verstehen den Unterschied zwischen Laborwerten und realen Nutzern, Sie kennen die Tricks der Web Worker und wissen, wie moderne CMS-Systeme und Frameworks getunt werden.
Der nächste Schritt? Tun! Öffnen Sie jetzt die PageSpeed Insights, prüfen Sie Ihre Hauptseite und setzen Sie den allerersten "Quick Win" aus Teil 7 um. Der Weg zu besseren Rankings und höheren Conversions beginnt heute.
Brauchen Sie Hilfe bei der Umsetzung? Kontaktieren Sie unser Performance-Team!

Dietrich Bojko
Senior Webentwickler
Webinteger arbeitet seit vielen Jahren produktiv mit Linux-basierten Entwicklungsumgebungen unter Windows.
Der Fokus liegt auf performanten Setups mit WSL 2, Docker, PHP, Node.js und modernen Build-Tools in realen Projekten – nicht auf theoretischen Beispielkonfigurationen.
Die Artikel dieser Serie entstehen direkt aus dem täglichen Einsatz in Kunden- und Eigenprojekten und dokumentieren bewusst auch typische Fehler, Engpässe und bewährte Workarounds.


