Planung ist alles
Unsere langjährige Erfahrung in komplexen Kundenprojekten, die sich über unterschiedliche Branchen und Zielgruppen erstrecken, haben uns sensibilisiert, vorauszuplanen.
Wesentliche Treiber für den Bedarf an Performance Optimierung sind:
- das zu erwartende Datenvolumen
- Komplexität der Datenstruktur
- komplexe Businesslogik mit umfangreichen Berechnungsschritten
- Lastspitzen bei vielen parallelen Systemzugriffe
Wartezeiten nutzen
Wir haben es in unseren Projekten nicht selten mit Datenbanken zu tun, in der Millionen von Datensätzen abgelegt und verarbeitet werden müssen. Die Erzeugung von Controlling-Statistiken und aufbereiteten Berichte, in denen Daten aus bspw. mehreren Unternehmensstandorten aufbereitet werden, bilden wir in asynchronen Tasks ab. Somit lassen sich Vorgänge durch den Benutzer starten und die Software, während der Prozess im Hintergrund abgearbeitet wird, weiter benutzen. Der Benutzer wird zB mit Push Notifications benachrichtigt, sobald der Auftrag abgeschlossen wurde. Die sich drehende Sanduhr und das Starren auf Ladebalken gehören somit der Vergangenheit an und Sie können Ihre Zeit sinnvoll nutzen.
Caching
Anfragen und Aktionen von Benutzern ähneln sich oftmals oder liefen sogar das selbe Ergebnis. Das beste Beispiel dafür, ist die einfache Darstellung von redaktionell erstellten Content. Deshalb setzen wir, sowohl in unseren TYPO3- als auch Softwareprojekten, Caching-Mechanismen ein. Beim Caching werden Ansichten, wie die Darstellung von Inhalten oder bereitgestellte Ressourcen, wie Bilddateien oder Datensätze aus Datenbanken, auf dem Endgerät oder in speziellen Systemen (zb. redis) gecached/zwischengespeichert. So müssen diese nicht bei jeder gleichen Anfrage neu geladen oder berechnet werden.
Automatisches “lernen” mit Warm-Ups
In einigen Projekten setzen wir eine selbstentwickelte Konfiguratorlösungen ein. Eine constraint basierte Engine berechnet, anhand der durch den Benutzer getroffenen Entscheidungen, bei der Konfiguration eines Produktes, die potentiellen Kombinationsmöglichkeiten der einzelnen Produktfeatures (zB. Auto- oder Küchenkonfigurator). Bei Produkten mit vielen Auswahlmöglichkeiten und komplexen Regeln, wie die Dinge unter Berücksichtigung von Randbedingungen miteinander kombiniert werden können, sind Millionen oder sogar Milliarden verschiedene individuelle Kombinationen möglich. Die Abhängigkeiten der Produktbestandteile zu berechnen kann bei dieser Multidimensionalität sehr lang dauern. Deshalb haben wir Methoden entwickelt, die die Leistung des Servers zu niedrig frequentierten Zeiten (zum Beispiel nachts) nutzen, um mögliche Nutzerentscheidungen zu simulieren und die Ergebnisse in einem Caching-Verfahren vorzuhalten. Wird diese Kombination nun von einem echten Benutzer angefordert, steht das Ergebnis bereits im Cache zur Verfügung und muss nicht neu berechnet werden.
Stellt ein Benutzer eine Anfrage, die bisher noch nie berechnet wurde, wird diese automatisch im Cache abgelegt und vom System “gelernt”. Dem nächsten Benutzer wird diese Anfrage anschließend schneller beantwortet. Der System steigert dadurch die eigene Effizienz fortlaufend selbstständig.