Performance

Performancemessungen

Mit der aktuellen Version der QR Invoice Library haben wir untenstehende Performance-Messungen erzielt. Damit die Messwerte nachvollziehbar und vergleichbar sind, wurden die Performance Messungen auf der AWS mit einer EC2 t2.micro Instanz. Dabei handelt es sich um eine kleine, virtuelle Instanz mit nur einer vCPU. Als OS wurde Amazon Linux und als Java Runtime OpenJDK 8 verwendet. Der Java Prozess wurde ohne explizite Memory Settings oder Tuning Parameter gestartet.

Die Tests wurden ohne Parallelisierung ausgeführt. Entsprechend lässt sich im produktiven Einsatz der Durchsatz durch mehrere CPUs und Parallelisierung steigern. Beim Test wird in jedem Durchlauf ein SwissPaymentsCode mit durchschnittlichem Payload geparsed, validiert und der Zahlteil inkl. Empfangsschein oder der QR Code im jeweiligen Format erzeugt. Das schreiben des Resultats in ein File ist nicht Bestandteil der Messung.

Wie die Messungen zeigen, ist die Erzeugung von PDF Output wesentlich schneller, als hochauflösende Rastergrafiken zu rendern. Bei Letzterem hängt die Performance jedoch auch stärker von der zugrunde liegenden Hardware ab. Die Erzeugung der Rastergrafiken erfolgt mittels Java ImageIO ohne zusätzlichen Libraries. Bei ImageIO ist bekannt, dass das Erzeugen von PNG Output im Vergleich zu anderen Implementierungen langsam ist. Das widerspiegelt sich auch in unseren Performancemessungen.

Die Rastergrafiken wurden mit einer Entsprechung von 300 DPI gerendert (mittlere Auflösung).

Erläuterungen zu nachfolgenden Messungen

  • warmUpRuns: Anzahl Generierungen bevor die Messungen in die Statistik einfliessen. Damit die Library initialisiert ist (1. Run) und die JVM zur Laufzeit optimieren konnte
  • runs: Anzahl Generierungen, welche in die Statistik einfliessen
  • output: entweder PaymentPart (ganzer Zahlteil) oder QrCode (nur der QrCode)
  • pageSize: Ausgabe auf A4 oder A6
  • sämtliche Messwerte sind in Millisekunden angegeben
warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=PDF pageSize=A4 locale=de
Statistics
- Min: 16
- Max: 55
- Mean / Avg: 34
- 50th percentile (Median): 34

warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=PDF pageSize=DIN_LANG locale=de
Statistics
- Min: 15
- Max: 58
- Mean / Avg: 28
- 50th percentile (Median): 32

warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=PNG pageSize=DIN_LANG locale=de
Statistics
- Min: 440
- Max: 881
- Mean / Avg: 446
- 50th percentile (Median): 444

warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=JPEG pageSize=DIN_LANG locale=de
Statistics
- Min: 103
- Max: 213
- Mean / Avg: 108
- 50th percentile (Median): 106

warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=BMP pageSize=DIN_LANG locale=de
Statistics
- Min: 93
- Max: 201
- Mean / Avg: 103
- 50th percentile (Median): 97

warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=GIF pageSize=DIN_LANG locale=de
Statistics
- Min: 119
- Max: 241
- Mean / Avg: 123
- 50th percentile (Median): 121

warmUpRuns=300 runs=1000 output=PaymentPartReceipt outputFormat=TIFF pageSize=DIN_LANG locale=de
Statistics
- Min: 118
- Max: 242
- Mean / Avg: 124
- 50th percentile (Median): 122

warmUpRuns=300 runs=1000 output=QrCode outputFormat=PDF
Statistics
- Min: 14
- Max: 40
- Mean / Avg: 19
- 50th percentile (Median): 16

warmUpRuns=300 runs=1000 output=QrCode outputFormat=PNG
Statistics
- Min: 17
- Max: 49
- Mean / Avg: 20
- 50th percentile (Median): 19

warmUpRuns=300 runs=1000 output=QrCode outputFormat=GIF
Statistics
- Min: 18
- Max: 50
- Mean / Avg: 20
- 50th percentile (Median): 19

warmUpRuns=300 runs=1000 output=QrCode outputFormat=TIFF
Statistics
- Min: 14
- Max: 44
- Mean / Avg: 16
- 50th percentile (Median): 15

Die QR Invoice Library ist ein Produkt der Codeblock GmbH

Codeblock GmbH
Rütlistrasse 7
CH-3014 Bern

Swiss Made Software