Gutscheine in unter einer Sekunde: PDF-Erzeugung per Benchmark entschieden
Für eine Gutschein-Plattform ein Magento-Plugin zur PDF-Erzeugung gebaut, die schnellste Rendering-Methode per Benchmark ermittelt und einen einbettbaren Widget-Shop mit Laravel und Livewire neu umgesetzt.
- Kunde
- Wiener Anbieter einer Gutschein-Plattform (im Auftrag von MediaSupport)
- Branche
- E-Commerce / Gutscheine
- Zeitraum
- 2020–2021
- Meine Rolle
- Entwickler im Unterauftrag: Konzept, Benchmarks, Plugin- und Laravel-Entwicklung
- Technologien
- Magento 2.3 · PHP · mutool · Ghostscript · Laravel 8 · Livewire · Tailwind CSS · AlpineJS
Ausgangslage
Ein Wiener Anbieter betreibt eine Plattform, über die Gutscheine verkauft werden. Ein Teil davon läuft über einen Magento-2.3-Shop. Wer dort einen Gutschein kauft, erwartet ihn sofort als druckfertiges PDF: einzeln, als mehrseitiges Dokument oder gebündelt als ZIP, auch zum Ausdrucken zu Hause. Angebunden werden musste das Ganze über die API der Plattform.
Dabei war die Geschwindigkeit entscheidend. Die PDF-Erzeugung läuft im Bestellprozess. Jede Sekunde, die sie dauert, spürt die Kundin oder der Kunde unmittelbar.
Dazu kam eine zweite Aufgabe: Ein bestehender Widget-Shop auf React-Basis sollte neu gebaut werden, damit Partner die Gutscheine direkt auf ihren eigenen Websites verkaufen können.
Beide Aufträge habe ich 2020 und 2021 über die Agentur MediaSupport umgesetzt.
Mein Beitrag
Ich habe allein gearbeitet, von der Konzeption bis zur fertigen Software:
- Analyse und UX-Feedback zum bestehenden Magento-Shop (März 2020)
- Konzept und Entwicklung des Voucher-Plugins für Magento 2.3 (September bis November 2020)
- Benchmarks verschiedener Rendering-Verfahren als Grundlage für die Technikentscheidung
- Neuentwicklung des Widget-Shops mit Laravel 8 und Livewire (2021)
Technische Umsetzung
Messen statt vermuten. Für die Umwandlung von Gutschein-PDFs in Vorschaubilder und druckfertige Ausgaben kamen mehrere Werkzeuge infrage. Statt mich auf Erfahrungswerte zu verlassen, habe ich die Varianten unter gleichen Bedingungen gemessen:
| Verfahren | Zeit |
|---|---|
| Ghostscript → JPG | 1,2 s |
| Ghostscript → PNG | 1,45 s |
| mutool → SVG | 1,3 s |
| mutool → PNG | 0,87 s |
Damit war die Entscheidung klar: mutool mit PNG-Ausgabe. Es war die schnellste Variante, und als einzige blieb sie unter einer Sekunde.
Das Plugin. Das Magento-Plugin erzeugt einzelne und mehrseitige Gutschein-PDFs, packt bei Bedarf mehrere Gutscheine in ein ZIP-Archiv, stellt die print@home-Variante bereit und kommuniziert über die API mit der Gutschein-Plattform.
Widget-Shop neu gedacht. Den bestehenden React-Widget-Shop habe ich mit Laravel 8, Livewire, Tailwind CSS und AlpineJS nachgebaut. Partner binden ihn auf zwei Wegen ein: entweder über ein eigenes HTML-Tag plus kleines Loader-Skript, wobei Höhe und Breite per data-Attribut steuerbar sind, oder klassisch als iframe. Der Shop ist mandantenfähig: Ein Attribut bestimmt, welcher Mandant und welcher Shop geladen wird. Für den Einsatz auf fremden Domains habe ich die CORS-Konfiguration sauber aufgesetzt und dokumentiert.
Livewire hatte für diesen Auftrag einen klaren Vorteil: Die Logik bleibt serverseitig in PHP, also in derselben Welt wie die übrige Plattform, und der Shop wirkt trotzdem interaktiv. Eine separate JavaScript-Anwendung musste nicht gepflegt werden.
Ergebnis
- PDF-Rendering in 0,87 Sekunden, rund 40 % schneller als die langsamste gemessene Variante (Ghostscript/PNG mit 1,45 s)
- Ein Magento-Plugin, das Einzel-PDFs, mehrseitige PDFs, ZIP-Pakete und print@home abdeckt
- Ein einbettbarer, mandantenfähiger Widget-Shop für Partner-Websites
- Der Widget-Shop war mit 65 Stunden kalkuliert und wurde innerhalb von vier Wochen geliefert
Was ich daraus mitnehme
Bei Performance-Fragen ist ein kleiner Benchmark fast immer schneller als eine lange Diskussion. Vier Messungen haben hier eine Entscheidung abgesichert, die sonst auf Bauchgefühl beruht hätte, und sie war für den Auftraggeber nachvollziehbar.
Beim Widget-Shop hat sich gezeigt, dass ein Neubau nicht automatisch mehr Komplexität bedeutet. Mit dem passenden Werkzeug wurde der Shop schlanker als das Original: weniger bewegliche Teile und eine Sprache für Frontend-Logik und Backend. Das macht ihn auch für die spätere Wartung einfacher.