Call Us (111) 234 - 5678

Internetagentur für e-Commerce
OXID eShop-Service
Tel.: 0761 612 578 57
Kontakt

Performance für Online-Shops (nicht nur Oxid)

Schnelle Shops verkaufen mehr. Das untermauern sogar Studien und Untersuchungen, die Shop-Ladezeit und Conversion in Relation zueinander setzen. Bryan Eisenberg spricht, um Zahlen zu nennen, sogar von einem Conversion-Einfall um 7 Prozent für jede Sekunde, die eine Seite zum Laden benötigt. Andere, die sich intensiver mit dem Thema auseinander gesetzt haben, nennen sogar 10 Prozent.

Genau diese 7 bis 10 Prozent gilt es, durch kürzere Ladezeiten eines Shops zu Kunden zu machen. Schließlich ist die Relation zwischen Aufwand (Shop-Umbau) und Gewinn (mehr Käufer) beachtlich. Bremsen im Shop-System können Sie binnen Stunden lösen. Oftmals sind Sie mit Ihren Shop-Bremsen nicht allein: Lösungen für gängige Fälle wie lahme Datenbanken, übergroße Stylesheets oder langsame Interpretation des Website-Codes (zum Beispiel PHP) sind verbreitet und Lösungswege gut dokumentiert. Oftmals genügen wenige Hebel, um viel rauszuholen.

Die hier erläuterten Beispiele richten sich an Shop-Betreuer /-Entwickler und -Hoster.

Regel Nummer eins: Ein Server kann nie schnell genug sein

Für gewöhnlich werden die Leistungsdaten des Servers an die erwarteten Besucherzahlen angepasst. Möglicherweise wurde Ihr Shop vor einiger Zeit auf einem kleineren Server eingerichtet und mittlerweile sind die Besucherzahlen deutlich angestiegen – hier kann nachgebessert werden, indem Sie auf einen stärkeren Server umziehen.

Optimierungsmaßnahmen am Shop, seinen Templates und dessen Codes sind ein Punkt, an dem Sie zur Leistungssteigerung ansetzen können. Der andere ist die Wahl des passenden Servers, damit Sie aus den weichen Optimierungsmaßnahmen noch mehr rausholen können.

Dedizierte Server für Shops mit hohem Besucheraufkommen

Gerade bei der Nutzung eines Servers als Host für ein Shop-System mit vielen Besuchern sollte dieser meiner Meinung nach wirklich nur als Server für den Shop genutzt werden. Andere Dienste wie ein Mailserver oder ein darauf untergebrachter eigener Statistikdienst sollten ausgelagert werden, weil sie wertvolle Rechenzeit kosten.

Datenbank-Performance

Selbst mittelgroße Shops können ein Datenbankvolumen mit wenigen Millionen Datensätzen aller Art aufweisen. Bei diesen Datenmengen, wenngleich immer nur kleinste Teile benötigt werden, gilt es, den Datenbankserver optimal auf die vorhandene Hardware abzustimmen. Dabei geht es um Einstellungen wie den zu belegenden Arbeitsspeicher (Datenbankserver sollten möglichst viel davon nutzen dürfen), die Transaktionslimits, Timeouts und den Zwischenspeicher für Abfragen. Zwei Tipps in aller Kürze:

  1. Der vom Datenbankserver nutzbare Hauptspeicher sollte höchstens die Hälfte des System-RAMs belegen. So bleiben genügend Reserven für andere Dienste wie beispielsweise den Webserver. Dies gilt natürlich nicht bei dedizierten Datenbankservern.
  2. Nutzen Sie eine effizientere Storage-Engine, wenn sinnvoll. InnoDb beispielsweise erlaubt Transaktionen und sperrt daher Felder nicht beim (Lese)-Zugriff. So fallen Wartezeiten weg und die Datenbank verhält sich im Endeffekt schneller. Die Verwendung von InnoDb ist vor allem bei großen Tabellen sinnvoll.
    » InnoDb verwenden

Webserver-Performance

Auch der eigentliche Webserver, in den meisten Fällen ist das Apache HTTPD, hat Optimierungspotenzial. Hosting-Angebote mit vorinstallierten virtuellen Servern decken ein hohes Maß an Kompatibilitätsanforderungen ab, bei denen viele Servermodule geladen werden, die für Ihre Zwecke vielleicht gar nicht benötigt werden. Jedes Modul, das geladen werden muss, benötigt schließlich Zeit. In der Summe kann dies die Auslieferung der Website verzögern.

Module für den Apache-Webserver können durch einfaches Verschieben von Symbolischen Verknüpfungen aus dem Verzeichnis /mods-enabled heraus deaktiviert werden. Ich persönlich lege für diesen Zweck das Verzeichnis /mods-disabled an und verschiebe Verknüpfungen zu Modulen einfach dorthinein. Besonders komfortabel geht das mit dem Programm WinSCP. So geht nichts verloren und die Module können im Problemfall schnell reaktiviert werden. Nach dem Ändern ist lediglich ein Apache-Neustart erforderlich.

Apache-Module deaktivieren

Apache-Module per Drag and Drop deaktivieren — ganz ohne Arbeit auf der Kommandozeile.

Von einem Server für einen Oxid-Shop ausgehend können folgende Module deaktiviert werden:

  • autoindex
  • cgi
  • eng
  • include
  • negitiation
  • status

Der Webserver wird mit

/etc/init.d/apache2 restart

oder unter CentOS

/etc/init.d/httpd restart

neu gestartet.

PHP-Performance

Der wichtigste Bestandteil des Webservers ist die PHP-Engine, die das Ausführen von PHP-Skripten in Apache überhaupt erst möglich macht. Auch die PHP-Konfiguration kann an einigen Stellen nachgebessert werden. Die Änderungen wirken sich jedoch nur indirekt auf die Leistung aus und greifen oftmals erst unter hoher Last. Dann liefert der Webserver oftmals gar keine Seite, weil beispielsweise Parameter wie max_execution_time nach Überschreitung der Skriptlaufzeit einfach die Ausführung quittieren und der Besucher nichts mehr zu sehen bekommt.

Dennoch sollten Parameter wie Skriptlaufzeiten, Einstellungen für zu verwendenden Speicher keinesfalls zu hoch gewählt werden. Erlauben Sie PHP erst einmal das Belegen von großen Teilen des Hauptspeichers und haben zudem lange Laufzeiten und Timeouts eingestellt, können aufwendige Skripte und Abfragen dazu führen, dass sich gar nichts mehr tut. Es gilt also: so viel wie nötig, so wenig wie möglich.

Shop-Installationen mit Oxid laufen nach meiner Erfahrung gut mit folgenden Einstellungen:

  • max_execution_time = 30
  • max_input_time = 30
  • memory_limit = 128M
  • post_max_size = 2M
  • upload_max_filesize = 4M

Dies sind allenfalls Richtwerde und müssen im jeweiligen Umfeld ausgiebig getestet werden. Das beste ist, bei allen Änderungen am Server schrittweise gen Ziel zu gehen und zwischendurch ausgiebig zu testen und zu beobachten.

Auch PHP-Module, die nicht benötigt werden, können deaktiviert werden. Für nahezu alle Shops gibt es Skripte, die prüfen, ob alle Bedingungen für den Betrieb erfüllt werden. Sie haben also leichtes Spiel beim Deaktivieren nicht benötigter Erweiterungen. Die PHP-Erweiterungen werden am Ende der Datei php.ini initialisiert und gegebenenfalls konfiguriert.

Das Zend-Optimizer-Gerücht

PHP-Erweiterungen wie Zend Guard Loader oder Optimizer (letzterer bis PHP 5.2) werden normalerweise nur benötigt, wenn Sie verschlüsselte PHP-Skripte ausführen möchten. Noch vor wenigen Monaten warb Zend damit, dass Optimizer und sein Nachfolger Guard Loader auch unverschlüsselten PHP-Code beschleunigen würden. Das hat sich in mehreren Versuchen nicht bestätigt oder war zumindest nicht messbar. Wenn Sie den Optimizer oder Loader mit Sicherheit nicht brauchen, können Sie die Zeile in der php.ini, die ihn aktiviert, einfach auskommentieren.

Änderungen übernehmen

Nachdem Sie Änderungen an der PHP-Konfiguration vorgenommen haben, müssen Sie den Webserver (meistens Apache, siehe oben) neu starten.

Seiten-Ladezeiten verkürzen

Die oben beschriebenen Maßnahmen tragen dazu bei, die Antwortzeiten zu verkürzen. Die Antwortzeit gibt die Dauer an, die vergeht, bis der Server vom Absenden der Anfrage (“schick mir die Seite index.php?cl=start”) bis zum Generieren der Antwort (“bitte, hier”) benötigt. Ab diesem Moment spielen Antwortzeiten nur noch eine untergeordnete Rolle. Die Seite wurde gegebenenfalls generiert und der fertige Quelltext wird an den Browser geschickt.

Quelltext optimieren

Dieser Quelltext kann hinsichtlich Ladezeit, also Größe, optimiert werden: Können in HTML aufgebaute Strukturen vereinfacht werden und mehr mit CSS formatiert werden? Werden Elemente überhaupt benötigt oder können sie weggelassen werden? Vor allem Seitenbestandteile, die aus viel HTML bestehen aber für die Benutzung der Seite nicht unbedingt erforderlich sind, können beispielsweise per Ajax nachgeladen werden. So können Sie beispielsweise das Grundgerüst einer Artikeldetailseite aufbauen und solche Zusätze wie Verknüpfte Artikel (Cross-Selling) oder Buttons sozialer Netzwerke verzögert nachladen.

Ajax nutzen, um mehr nachzuladen

Denkbar ist die Nutzung von Ajax auch für andere aufwendige Elemente, wie Navigationsmenüs, Wahlschalter in Filtern, Pagern. Auch für die Anzeige von zusätzlichen Bildern kann Ajax eingesetzt werden, um diese erst bei Bedarf nachzuladen.

Weniger HTML, mehr CSS

Der HTML-Quelltext ist, wie oben beschrieben, das Grundgerüst des ausgelieferten Dokuments. Er sollte allenfalls reinen Inhalt, aber keine gestalterischen Elemente enthalten. Besonders streng wurde das in XHTML 1.1 reglementiert (der Standard ist aber kaum verbreitet). Egal, ob Sie mit HTML 4, 5 oder XHTML arbeiten: durch die Nutzung von CSS können Sie das Gerüst stark entschlacken und auf Formatierungsanweisungen im HTML-Code verzichten.

Ein Beispiel für besonders aufgeblähtes HTML:

<p><u><i><span style=“color:#ff0000;“>Dieser Text soll rot, fett und unterstrichen dargestellt werden.</span></i></u></p>

Bei der Nutzung zweier CSS-Klassen kann man auf viel Last verzichten:

<p class=“red hint“>Jetzt färbt die Klasse “red” den Text rot, “hint” unterstreicht ihn und erhöht die Strichstärke.</p>

Wiederholen Sie sich nicht

Ähnlich wie bei der Softwareentwicklung kann man auch bei CSS den Ansatz verfolgen: wiederholen Sie sich nicht! Formatierungsanweisungen, die mehrfach zum Einsatz kommen können (zum Beispiel die Kombination font-weight:bold; text-decoration:underline;) können Sie in eigene Klassen auslagern. Mit diesen kombinieren Sie Elemente, die deren Eigenschaften annehmen sollen. Sparen Sie sich also das Erzeugen langer Style-Anweisungen und lagern Sie wiederverwendbare Teile in eigene Klassen aus.

An Problemstellen ansetzen

Alle modernen Webbrowser können Ihnen dabei helfen, Elemente mit hoher Ladezeit aufzuspüren.

Ladezeiten-Auswertung

Der Webbrowser hilft beim Finden der langsamen Seitenbestandteile.

Ein Beispiel: Im Oxid-Standardshop benötigt das mitgelieferte jQuery-Skript viel Zeit. In diesem Fall können Sie auch das von Google gehostete Skript in das Template einbinden und auf das Laden der mitgelieferten Datei verzichten. Diese von Google gehostete Datei liegt bereits mit hoher Wahrscheinlichkeit im Browser-Cache des Besuchers, weil tausende andere Sites sie bereits eingebunden haben.

<script src=“https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js“ type=“text/javascript“></script>

Viele Dateien brauchen viel Zeit

Im gewählten Beispiel zeigt der Browser eine hohe Zahl an Anfragen Requests) an. Für jede Datei, die geholt werden muss, wird eine Anfrage gestellt. Da die Menge gleichzeitiger Anfragen begrenzt ist, kommt es hier schnell zu Verzögerungen. Sie können Inhalte kombinieren, um die Anzahl an Requests zu verringern:

  1. Kombinieren Sie Stylesheets in wenige Dateien
  2. Verwenden Sie CSS-Sprites anstelle vieler kleiner Grafiken.
Ladezeiten nach Optimierung

Beispiel für die Auswertung bei einem Shop, bei dem die oben beschriebenen Optimierungen vorgenommen wurden.

Shopsystem-Performance

Ist vielleicht ein Update für Ihr Shop-System verfügbar, das das System schneller macht?Weil bei der Entwicklung ein Wettlauf zwischen neuen Features (die Rechenzeit brauchen) und performancesteigernden Techniken entsteht, ist es gut möglich, dass ein neues Release schneller arbeitet als das, welches vielleicht gerade im Einsatz ist. Ein aktuelles Beispiel ist der Oxid-Shop, der seit der Version 4.6 verstärkt auf Techniken wie Lazy Loading setzt, um unnötige Abfragen auszulassen oder nur Komponenten zu laden, die zur Generierung der aktuellen Seite wirklich benötigt werden.

Fazit

Schnelle Shops sind das Resultat vieler Optimierungen an vielen Punkten. Sie können mehr aus dem Server herausholen, aber auch den Code Ihres Shops oder Ihrer Website so gestalten, dass er schneller verarbeitet und Resultate schneller ausgeliefert werden können.

Wem das nicht reicht, der kann verschiedene Caching-Techniken nutzen, die sich die Shop-Entwickler und –Hoster fast immer bezahlen lassen.

One Response so far.

  1. […] zum Thema Shop-Performance – auch mit Blick auf die Performance des Webservers – habe ich im Blog bei imva.biz beschrieben. Hier gehe ich auch noch einmal auf das Thema Tempates und Stylesheets ein. /* Dieser Eintrag […]

Sie müssen eingeloggt sein, um einen Kommentar zu verfassen.