Ladezeit verringern mit Laravel – Teil 1: Die Basics

Die Ladezeit einer Website ist ein wichtiger Faktor für viele Dinge. Jede zusätzliche Sekunde erhöht die Chance, dass der Besucher ungeduldig wird und unsere Seite wieder verlässt. Dieser Fakt ist auch ein Grund für Suchmaschinen wie Google die Seitenladezeit als Indikator für unser Suchmaschinenranking zu benutzen, daher ist die Optimierung der Ladezeit ebenfalls ein wichtiger SEO Bestandteil.

In dieser Artikelserie steigen wir in die Optimierung von Laravelanwendungen ein um die Ladezeit dieser Anwendungen zu verringern. Dabei geht es nicht nur um Laravelspezifische Änderungen sondern auch allgemeine Dinge die die Geschwindigkeit unserer Seite beträchtlich erhöhen können wie beispielsweise Caches und Webserverkonfigurationen.

Seitenladezeit Grundlagen

Wenn eine Website aufgerufen wird passiert sie diverse Stationen. Jede dieser Stationen hat das Potenzial, die Ladezeit zu erhöhen und an jeder Station gibt es Fallen, auf die man achten muss um das zu verhindern. Sehen wir uns die einzelnen Punkte einmal an.

  1. Der User gibt die Adresse unserer Webseite in den Browser ein und drückt ENTER.
  2. Jetzt kann der Browser erstmal überprüfen ob es vielleicht im lokalen Cache bereits eine noch gültige Version der Seite gibt. Das ist natürlich der optimale Fall der auch am schnellsten geht, da hier das Internet so gut wie gar nicht benötigt wird. Leider lauern auch hier einige Fallen auf die wir dann aber in einem extra Artikel gesondert eingehen.
  3. Der Browser findet über DNS seinen Weg zu unserem Webserver und sendet einen Request an diesen. Über diesen Weg haben wir noch nicht viel Kontrolle, da dies einerseits von den DNS Servern und andererseits von der Internetgeschwindigkeit (beziehungsweise auch dem Aufenthaltsort des Besuchers) abhängt. Ein Request von Südafrika nach Nordeuropa dauert offensichtlich länger als ein Request der nur die Strecke zwischen Hamburg und Frankfurt überbrücken muss.
  4. Jetzt ist unser Server am Zug. Ab hier haben wir die Kontrolle und können die User Experience unseres Besuchers bestimmen. Fordern wir eine statische Datei an (beispielsweise ein Bild oder eine JavaScript Datei) liefert der Webserver diese direkt an den Browser zurück welche sie dann anzeigen kann.
  5. Findet das Ganze aber über PHP statt besteht natürlich viel Potenzial – in unserem Script könnten Datenbankabfragen gemacht werden, es könnten Dateien gelesen / geschrieben werden oder ganze Requests an andere Server abgefeuert. All das kostet Zeit und belastet damit die Ladezeit.
  6. Das Ergebnis des Ganzen wird an den Browser zurückgesendet und dieser kann dann weiter arbeiten.

 

Aber wo können wir nun ansetzen um diese einzelnen Stationen zu verschnellern? In diesem Artikel beginnen wir mit den Basics, die man beachten sollte, um eine Laravel Installation in einer Produktionsumgebung laufen zu lassen. Mit jedem neuen Artikel der Serie nähern wir uns dann einen Schritt weiter einer performanten Website, die sowohl unsere Besucher sowie Google glücklicher macht als auch häufig schlicht unseren Server schont und damit bestenfalls die eigenen Hostingkosten senkt.

 

 

Debugmodus deaktivieren

Einer der ersten Schritte beim Aufsetzen einer Produktionsumgebung sollte das Deaktivieren des Debugmodus sein. Während der Entwicklung ist der Debugmodus so gut wie unverzichtbar da hier normalerweise einerseits der Cache deaktiviert wird (was ausschließt, dass wir fünf mal die Seite neu laden und uns wundern warum unsere Änderungen nicht auftauchen) und andererseits die Fehlerseiten wichtige Informationen zu den aufgetretenen Fehlern enthalten (welche wir unseren Besuchern natürlich auf keinen Fall zeigen sollten, da wir so auch potenziellen Angreifern wichtige Informationen über unsere Serverumgebung geben).

Zum Deaktivieren des debug Modus ändern wir in der Datei .env einfach den Wert hinter APP_DEBUG auf false (sollte die .env Datei nicht existieren kopieren wir die Datei .env.example mit dem Namen .env).

 

View Cache aktivieren

Als nächstes sollten wir sicherstellen, dass unser View Cache für eine niedrige Ladezeit aktiviert ist. Während unsere Seite aufgebaut wird erzeugt Laravel aus unseren Views kompilierte Versionen. Da dieser Vorgang eigentlich immer derselbe ist (bis sich die Views verändern) muss das nicht jedes mal erneut geschehen, wenn ein Besucher auf die Website kommt sondern die kompilierten Views können einfach gespeichert werden.

Um sicherzustellen, dass unser View Cache aktiviert ist muss der Wert CACHE_ENABLED in der Datei .env auf true gesetzt sein.

 

 

Routen cachen

Und noch eine letzte Verbesserung für unsere Laravel Anwendung. Falls eine Anwendung viele Routen definiert kann das ebenfalls zu einer Senkung der Ladezeit führen. In der Datei routes.php definieren wir, welche URL zu welchem Stück Code in unserer Anwendung führen soll. Diese Logik (zum Beispiel das Unterteilen von Routen in Gruppen etc) muss jedes mal wieder ausgeführt werden wenn wir den Routencache nicht verwenden. Bei ein paar einzelnen Routen ist das kein Problem aber größere Anwendungen haben schnell Duzende – wenn nicht Hunderte – davon und hier gehen natürlich wertvolle Millisekunden verloren.

Glücklicherweise ist der Routencache schnell aktiviert. Dafür rufen wir einfach den Konsolenbefehl php artisan route:cache auf. Sollten wir den Cache wieder löschen wollen gibt es dafür den Befehl php artisan route:clear.

Achtung!

  1. Nach dem Aufruf des Befehls werden die Routen in einer separaten Datei abgespeichert und diese Datei wird ab dann verwendet. Nehmen wir nun Änderungen an der routes.php vor werden diese Änderungen NICHT in den Cache übernommen bis wir erneut den Cache Befehl ausführen (oder den Cache löschen). Das ist natürlich gerade während der Entwicklung äußerst nervig weshalb ich empfehle, den Routencache nur in einem Produktionssystem – am besten als Teil eines automatischen Deployprozesses – auszuführen.
  2. Das Caching funktioniert nicht, wenn eine unserer Routen direkt eine Funktion anstatt der Methode eines Controllers aufruft. Definitiv noch ein Grund dafür, unsere Funktionalität übersichtlich in Controller auszulagern. 🙂

 

PHP7 installieren

PHP7 ist bereits seit einigen Monaten veröffentlicht und die Akzeptanz ist überwältigend – immer mehr Hoster upgraden auf die aktuelle Version. Und die Gründe sind klar: Ein Großteil aller in PHP geschriebenen Webseiten kann problemlos von PHP5.6 auf PHP7 upgraden ohne den eigenen Code dafür anpassen zu müssen. Auch Laravel ist komplett PHP7 kompatibel. Aufgrund der zahlreichen Performanceverbesserungen von PHP7 kann man durch dieses einmalige Upgrade einen deutlichen Performanceboost und gleichzeitig Rückgang der Serverlast erreichen. Wie man PHP7 unter Ubuntu installiert erfährst du in diesem Artikel.

 

Das waren die ersten und grundlegenden Tipps um die Ladezeit unserer Website dauerhaft zu verringern. Hast du noch mehr Tipps und Tricks wie du deine eigene Laravel Seite verschnellert hast? Ich würde mich sehr freuen wenn du sie in den Kommentaren mit uns teilst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*