Webserverumgebung

Die Ver­ar­beitungszeit im Back­end macht zwar nur 10 bis 20 Prozent der Ladezeit aus [Sou07], den­noch kann dieser Ein­fluss zu schlecht­en Ladezeit­en ein­er Web­site führen. Dies passiert beispiel­sweise wenn die Servergeschwindigkeit, die Ver­ar­beitungszeit von PHP oder die Daten­bank­abfra­gen zu langsam erfol­gen [Ste12]. Durch die Wahl des Host­ing-Anbi­eters und die Art des Host­ings lassen sich diese Fak­toren bee­in­flussen. Die Auswahl reicht von einem Shared-Web­host­ing über V‑Server bis hin zu dedi­zierten Root-Servern. Bei den Shared-Web­host­ing Ange­boten ste­hen die Kapaz­itäten des Web­servers nur begren­zt zur Ver­fü­gung. Prozes­sor, Arbeitsspe­ich­er und die Fest­plat­ten des Web­servers wer­den mit anderen Kun­den des Host­ing-Anbi­eters geteilt. Die Aus­las­tung ist unbekan­nt und kann zu Per­for­mance-Prob­le­men führen [KR13], zudem beste­ht keine Möglichkeit die Kon­fig­u­ra­tion des Web­servers direkt zu bee­in­flussen [CIW15]. Anpas­sun­gen an der Kon­fig­u­ra­tion lassen sich in den meis­ten Fällen auss­chließlich über eine HTAC­CESS-Datei vornehmen [CIW15]. V‑Server und Root-Serv­er garantieren hinge­gen mehr Hard­ware-Kapaz­itäten und lassen sich, sofern es sich nicht um extern betreute Man­aged Serv­er han­delt, kom­plett eigen­ständig kon­fig­uri­eren.

Neben der Hard­ware stellt auch die Soft­ware des Web­servers einen Ansatzpunkt zur Opti­mierung dar. Das Betrieb­ssys­tem ist die Schnittstelle zur Hard­ware und sollte richtig kon­fig­uri­ert und stets aktuell gehal­ten wer­den, um Sicher­heits- und Per­for­mance-Prob­leme zu ver­mei­den. Der Apache HTTP Serv­er ist die am häu­fig­sten einge­set­zte Web­serv­er-Soft­ware, jedoch wer­den von großen Web­sites ver­mehrt Alter­na­tiv­en wie Lighttpd oder Nginx einge­set­zt, die sich bei der Ver­ar­beitung der Anfra­gen unter­schei­den. Während der Apache prozess­basiert arbeit­et und jede einge­hende Anfrage in einem eige­nen Betrieb­ssys­tem-Thread ver­ar­beit­et, erfol­gt die Ver­ar­beitung der Anfra­gen bei Nginx und Lighttpd asyn­chron über die Instanzen ein­er gemein­samen Warteschlange. Dadurch wer­den weniger Ressourcen benötigt und mehrere Anfra­gen kön­nen gle­ichzeit­ig bear­beit­et wer­den [KR13].

Die Nutzung von Redi­rects zur Umleitung von ein­er Anfrage auf eine andere URL führt dazu, dass mehr Ladezeit als bei einem direk­ten Abruf benötigt wird [KR13]. Dies gilt sowohl für den Abruf von HTML-Doku­menten als auch für alle son­sti­gen Ressourcen ein­er Web­seite und sollte nach Möglichkeit ver­mieden wer­den [Sou07]. Nachteilig wirken sich Redi­rects vor allem bei mobilen Daten­net­zen aus, da dort HTTP-Anfra­gen die Ladezeit wahrnehm­bar erhöhen [KR13].

Ein weit­er­er Ansatzpunkt ser­ver­seit­iger Opti­mierun­gen ist die für dynamis­che Web­sites erforder­liche Skript­sprache PHP. Lor­na Jane Mitchell hat in mehreren Ver­suchen die Per­for­mance ver­schieden­er PHP-Ver­sio­nen ver­glichen und kam zu dem Ergeb­nis, dass sich die Per­for­mance mit jed­er neueren Ver­sion verbesserte. Getestet wur­den die PHP-Ver­sio­nen 5.3, 5.4, 5.5 und 5.6. Während eine Test­datei unter PHP 5.3 zur Aus­führung 3,9 Sekun­den benötigte, erfol­gte die Aus­führung mit PHP 5.6 in 2,4 Sekun­den und so-mit 1,5 Sekun­den schneller [Mit14].

Abbil­dung 3.1: Ver­gle­ich der Aus­führungszeit ver­schieden­er PHP-Ver­sio­nen nach [Mit15]

Eine sig­nifikante Verbesserung der Per­for­mance zeigte Lor­na Jane Mitchell in einem weit­eren Ver­such mit ein­er anderen Test­datei und der vor­läu­fi­gen Alpha-Testver­sion von PHP 7 (siehe Abbil­dung 3.1) [Mit15].

Bei dem Abruf ein­er Web­seite sendet der Client zur Über­tra­gung einzel­ner Ressourcen mehrere HTTP-Anfra­gen an den Web­serv­er. Diese einzel­nen Über­tra­gun­gen führen dazu, dass die Verbindung jew­eils neu aufge­baut wer­den muss. Durch den Con­nec­tion-Head­er Keep-Alive kann dieser Vor­gang ver­hin­dert wer­den. Mit Hil­fe von Keep-Alive kann die Verbindung zwis­chen dem Client und dem Web­serv­er offenge­hal­ten wer­den, um eine effizien­tere Über­tra­gung der Ressourcen zu erre­ichen sowie Verzögerun­gen bei der Ladezeit zu ver­mei­den [Ber15]. Sowohl der Brows­er als auch der Serv­er sind in der Lage die beste­hende Verbindung jed­erzeit zu schließen [Sou07]. Da durch viele offene Verbindun­gen der Spe­icherver­brauch des Web­servers steigt [Dav13], wer­den vier bis acht Giga­byte Arbeitsspe­ich­er zur Gewährleis­tung der Server­per­for­mance emp­fohlen [CIW15]. Keep-Alive ist bei vie­len Web­servern bere­its stan­dard­mäßig aktiviert. Dies kann in den Head­ers der Entwick­ler-Tools des Browsers Chrome geprüft und gegebe­nen­falls per HTAC­CESS-Datei mit dem fol­gen­den Code aktiviert wer­den.

<ifModule mod_headers.c>
Header set Connection keep-alive
</ifModule>

Per­for­manceop­ti­mierun­gen der Web­serverumge­bung haben vor­wiegend Auswirkun­gen auf die Time to First Byte, da sie die Ver­ar­beitungs- und Antwortzeit­en für das HTML-Doku­ment bee­in­flussen. Darüber hin­aus kann auch das Ren­der­ing im Brows­er durch die Ladezeit einzel­ner Ressourcen bee­in­flusst wer­den, sofern für deren Aus­liefer­ung kein Con­tent Deliv­ery Net­work Ver­wen­dung find­et.