Headerimage Case Studies

Performance

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 in parallelen Systemzugriffe

Bevor wir beginnen Code zu schreiben, nehmen wir daher die abzubildenden Prozesse und Anforderungen der Zielgruppe genau in den Blick. Im Rahmen von gemeinsamen Workshops und Infrastruktur-Audits stellen wir sicher, dass auch verdeckte Querabhängigkeiten zum Vorschein kommen. Nur so ist es möglich, die zu wählende Architektur optimal auf die erwartete Performance abzustimmen. Datensparsamkeit ist nicht nur ein Datenschutzthema, sondern wichtiger Treiber was Rechen- und Ladezeiten betrifft. So stellen wir sicher, dass wir nur so viele Daten wie nötig zwischen Frontend und Backend austauschen und den überwiegenden Teil der Logik auf der leistungsstarken Infrastruktur der Server abbilden. So werden die weniger leistungsstarken Endgeräte entlastet und die Usability für die Nutzer verbessert.

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.