Optimierte Shopentwicklung / Anwendungsentwicklung – Ein paar einfache Grundregel

Auf diesen Blog Eintrag http://www.simoon.de/2012/06/21/shopware-caching-optimierung/ der schon etwas älter ist wurde ich gefragt ob ich ein paar Anhaltspunkte für die Performanceoptimierung unserer eigen entwickelten Shopsoftware geben kann.

Im letzten Jahr hab ich durchgehend an unserem eigen entwickelten Shopsystem gearbeitet und nun ist er seit 11/2016 mit https://www.fpv24.com live. Bei der Entwicklung stand für mich Performance im Vordergrund. Die Aufgabenstellung dabei war auf eine minimale Renderzeit der Seiten zu erreichen. Dieses Ziel betrachte ich für mich als erreicht 🙂 Der Shop rendert ungecacht in 0,8 Sekunden und gecacht in 0,08 bis 0,2. Damit habe ich Performanceverbesserung um Faktor 10 gegenüber Shopware erreicht und das auf einem Server der nur 2 anstelle von 12 Kernen und nur 8 anstelle von 32 GB RAM hat. Im 1:1 Vergleich fällt das Ergebnis wahrscheinlich noch deutlicher aus.

Ich möchte hier in Stichpunkten erklären worauf bei der Entwicklung geschaut habe. Hier geht es im Optimierungen in der Applikation und nicht an der Serverstruktur.

1. Stelle einfache Fragen
Ja, Datenbanken können alles mögliche, was sie aber besonders gut können ist einfache Fragen zu beantworten. So verwende ich komplexe Abfragen nur da wo Sie auch auf Dauer gut performen. Wer sich mal die Querys angeschaut hat mit der gängige Shops die Datenbank malträtieren weis wovon ich rede.

2. Stelle keine Fragen oder CACHING
Eine Memcached Anfrage ist IMMER schneller als eine Datenbankabfrage. Daher werden alle Datenbankabfragen bzw. deren Ergebnisse gechacht, mit Memcached ist das denkbar einfach und sehr effektiv.


if ( ($data=$this->cache->memcached->get('produkt_'.$produktid)) && ($this->config->item('use_cache_products')==true) ) { 
          
}
else 
{

/* hier holst du deine Daten */

$this->cache->memcached->save('produkt_'.$produktid, $data, $this->config->item('cache_time'));

}

return $data;

Das Caching kann nach belieben ausgeweitet werden. So cache ich bei den Produktseiten nur die Daten der DB, bei der Navigation aber das Ergebnis des HTML Renderings, also den fertigen HTML Code. Man kann natürlich auch komplette Seiten cachen.
Ich cache die Daten in Memcache derzeit, es kann natürlich auch Redis oder sonstige NOSQL Lösung verwendet werden.

3. Finde deinen Feind
Schau dir deine Entwicklung regelmässig an und schaue wo die meiste performance verloren geht. Optimiere hier.

4. Bau nur ein was du wirklich brauchst oder KEEP IT SIMPLE!.
Frameworks sind eine gute Sache, Sie stellen dir unendliche Möglichkeiten der Vereinfachung zur Verfügung. Meiner Erfahrung nach ist das aber oft unnötig und im Hinblick auf Performance eher schädlich. Brauch man wirklich die Klasse die auf jede Dynamik und Veränderung reagieren kann oder habe ich im Endeffekt weniger bis keine Dynamik (z.B. in der DB Struktur). Nutze möglichst einfache und schlanke Lösungen. Code der nicht ausgeführt werden muss kostet auch keine Performance.

Es gibt sicher noch einen Haufen weitere Dinge die man optimieren und verbessern kann, dies sind nur 3 kleine Tipps die sich aber einfach umsetzen lassen und meist ein ordentliches Ergebnis haben.

Meine Anwendung läuft auf Codeigniter, mit Smarty, Nginx, MySQL und PHP.

Wer Fragen hat kann sich gerne melden.

Lighttpd Rewrite Rule für IP.Board

Here is the Rewrite Rule for IPB running on Lighttpd.
It works with 3.4.* and probably the most otheres.


url.rewrite-once = (
"^/(sitemap.xml)" => "$0",
"^/(.*)\.html" => "/index.php/$1",
"^/(.*)\.(.*)" => "$0",
"^/(.*)\.(css|js|gif|jpg|png)$" => "$0",
"^\/(images|javascript|style)(.*)$" => "$0",
"^/(.+)/?$" => "/index.php/$1"
)

Lumenier QAV 250

Nachdem wir die Quadcopter in der letzten Zeit vergrößert haben, hier nun mal ein kleiner FPV-Racer. Der QAV 250 ist schnell und einfach zu bauen so das man nach ca. 3 Stunden in der Luft ist. Auch das Setup des OpenPilot CC3D ist dank der gut gestalteten Setup Software kein Problem und erledigt sich recht einfach. Auch macht das USB hier keinerlei Problem wie man sie gelegentlich von anderen Controllern kennt. Die ersten Flugversuche brachten bisher keine Überraschungen. Nun werde ich den Racer mal mit FPV ausstatten und dann mal schauen wie er sich im Park macht 🙂

Neues Projekt – Simprop Excel Injection FPV Tauglich

Vor einigen Wochen waren wir mit einem Freund fliegen der einen Hotliner/Segler dabei hatte. Eine für mich recht neue Klasse von Flugzeugen. So hab ich beschlossen mir auch einen zu holen. Auf der Suche nach einem für einen „Anfänger“ geeigneten Modell bin ich auf den Simprop Excel Injection gestoßen. Natürlich muss der mit FPV Ausgestattet werden, hier kommt der TBS Core Pro zum Einsatz. Auf dem Bild seht ihr einen Schwerpunkttest, so sollen die Komponenten im Rumpf plaziert werden. Der Schwerpunkt passt, jetzt geht es an den Einbau. Erste Tests haben ergeben das sich alles komplett im Rumpf verstecken lässt und auch sollten die Komponenten genug Abstand zu einander haben.
2014-07-27 11.05.16

TBS Caipirinha in Action

Nachdem ich den Caipirinha so schön eingeflogen hab und auch schon die ein oder andere Runde gedreht hab hier ein kleines Video.
Der Caipirinha ist extremst robust und fliegt wie auf schienen. Er macht echt Spass 🙂

TBS Caipirinha

Nach vielen Wochen des Wartens kam vor ein paar Tagen mein TBS Caipirinha an. Zu meiner großen Freude auch noch in Schwarz 🙂 Mittlerweile ist er zusammengebaut und flugtbereit. Der Zusammenbau ging recht einfach von der Hand und die Teile sind alle recht Passgenau, da gab es wenig zu meckern. Ich bin mal gespannt auf den Erstflug.

TBS Caipirinha 1

TBS Caipirinha 2