Performance

Mesures de performance

Avec la version actuelle de la librairie QR Invoice, nous avons effectué des tests de performance. Afin que les valeurs mesurées soient compréhensibles et comparables, les mesures de performance ont été réalisées sur une instance EC2 t2.micro de AWS. Il s’agit là d’une petite instance virtuelle avec seulement un vCPU. Amazon Linux et l’OpenJDK 8 ont été utilisé. Le processus Java a été démarré sans aucune configuration mémoire spécifique ou paramètres de tuning.

Les tests ont été réalisés sans aucun parallèlisme. Sur un système productif, le parallelisme ou l’utilisation de plusieurs CPUs auraient évidemment un effet positif sur la performance. Pour chaque test, un SwissPaymentsCode avec un payload moyen est parsé et validé puis la section paiement avec le récépissé ou le QR code dans les différents formats sont générés. L’écriture des résultat dans un fichier n’est pas prise en compte dans la mesure.

Comme le montrent les mesures, la génération d’un PDF est bien plus rapide, que le rendu graphique d’une image matricielle haute résolution. Au final, la performance est principalement dépendente du hardware utilisé. La génération d’une image se fait via Java ImageIO sans librairie supplémentaire. ImageIO est connu pour être lent pour la génération de PNG en comparaison avec d’autres implémentations, ce qui se voit dans les mesures de performance.

Les images matricielles ont été générée avec une résolution de 300 DPI (résolution moyenne).

Explication pour les mesures suivantes

  • warmUpRuns: nombre de générations avant la mesure effective de la performance, afin que la librairie soit initialisée (1ère passe) et que la JVM puisse effectuer les optimisations au runtime.
  • runs: nombre de générations comptant pour la mesure de performance
  • output: soit PaymentPart (toute la section paiement) ou QrCode (seuleemnt le QR code)
  • pageSize: format A4 ou A6
  • toutes les mesures de performance sont données en millisecondes
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

Les solutions QR Invoice sont des produits de Codeblock GmbH

Codeblock GmbH
Rütlistrasse 7
CH-3014 Bern

Swiss Made Software