Benchmark
Renderzeit-Benchmark
Wie lange dauert es, aus HTML, Markdown oder einer Webseite ein PDF zu machen? Wir haben sechs alltägliche Dokumente je 100-mal über unsere Produktions-API in der EU gerendert und jedes Rendering mit drei Uhren gemessen: im Renderer, in der API und auf dem aufrufenden Rechner. Im Median brauchte eine einseitige Rechnung 124 ms im Renderer und 336 ms Ende zu Ende. Dokumente, Skript und Rohdaten sind öffentlich: Sie können jede Zahl prüfen und den Test selbst wiederholen.
| Einseitige Rechnung | 124 ms im Renderer, 336 ms Ende zu Ende (Median) |
|---|---|
| Katalog mit 20 Seiten | 276 ms im Renderer, 619 ms Ende zu Ende (Median) |
| Webseite als PDF | 2,8 s im Renderer, das meiste davon für das Laden der Seite |
| Warten auf einen Renderer | höchstens 5 ms im Median, höchstens 9 ms bei p95 |
| Renderings | 600 gemessen, 100 je Dokument, immer eins nach dem anderen. 598 erfolgreich; 2 bekamen keine Antwort, weil die Verbindung abbrach, und zählen nicht mit. |
| Aufbau | Produktions-API in der EU (Server in Deutschland), Engine 2026.4 mit Chrome 153, Live-API-Schlüssel (kein Wasserzeichen), Client: ein Laptop in Deutschland |
Ergebnisse
Zeit im Renderer
total_ms: vom Einreihen des Auftrags bis zur gespeicherten Datei, gemessen vom
Render-Worker. Diese Zahl nennen auch unsere Produktseiten.
| Dokument | Median | p90 | p95 | Max. |
|---|---|---|---|---|
| Rechnung 1 Seite, HTML-Vorlage + JSON | 124 ms | 170 ms | 185 ms | 204 ms |
| Markdown-Anleitung 2 Seiten, GitHub-Theme | 144 ms | 203 ms | 229 ms | 258 ms |
| Bericht 5 Seiten, 5 Tabellen, Seitenzahlen | 200 ms | 251 ms | 270 ms | 287 ms |
| Produktkatalog 20 Seiten, Titelseite, 38 SVG-Grafiken | 276 ms | 323 ms | 326 ms | 475 ms |
| Social-Media-Bild PNG, 1200 × 630 | 396 ms | 449 ms | 473 ms | 554 ms |
| Webseite als PDF unsere Startseite, 12 Seiten | 2.769 ms | 2.938 ms | 3.069 ms | 3.322 ms |
Ende zu Ende, aus Sicht des Aufrufers
client_ms: vom Absenden der Anfrage bis zum letzten Byte der Datei auf einem Laptop in
Deutschland. Die letzten beiden Spalten teilen den Median auf: was die API selbst beitrug
(Authentifizierung, Prüfung, Übergabe des Auftrags, Zurückschicken der Datei) und was das Netzwerk
beitrug (Hin- und Rückweg und der Download).
| Dokument | Datei | Median | p95 | API | Netzwerk |
|---|---|---|---|---|---|
| Rechnung 1 Seite, HTML-Vorlage + JSON | 36 KB | 336 ms | 544 ms | 69 ms | 120 ms |
| Markdown-Anleitung 2 Seiten, GitHub-Theme | 64 KB | 369 ms | 566 ms | 69 ms | 146 ms |
| Bericht 5 Seiten, 5 Tabellen, Seitenzahlen | 90 KB | 469 ms | 1.380 ms | 71 ms | 164 ms |
| Produktkatalog 20 Seiten, Titelseite, 38 SVG-Grafiken | 397 KB | 619 ms | 1.178 ms | 74 ms | 249 ms |
| Social-Media-Bild PNG, 1200 × 630 | 455 KB | 760 ms | 1.186 ms | 73 ms | 267 ms |
| Webseite als PDF unsere Startseite, 12 Seiten | 3,0 MB | 3.855 ms | 5.300 ms | 116 ms | 919 ms |
API und Netzwerk sind Mediane der Differenzen je Rendering, api_ms − total_ms
und client_ms − api_ms. Mediane ergeben in der Summe nicht genau den Gesamtwert.
Wohin die Zeit geht
Der Renderer meldet für jeden Auftrag jede Stufe. Mediane in Millisekunden:
| Dokument | Warteschlange | Vorlage | Rendern | Abschluss | Speichern | Gesamt |
|---|---|---|---|---|---|---|
| Rechnung | 2 ms | <1 ms | 91 ms | <1 ms | 19 ms | 124 ms |
| Markdown-Anleitung | 2 ms | <1 ms | 111 ms | 1 ms | 15 ms | 144 ms |
| Bericht | 5 ms | 1 ms | 166 ms | 1 ms | 17 ms | 200 ms |
| Produktkatalog | 4 ms | 2 ms | 230 ms | 3 ms | 21 ms | 276 ms |
| Social-Media-Bild | 2 ms | <1 ms | 307 ms | 54 ms | 27 ms | 396 ms |
| Webseite als PDF | 2 ms | <1 ms | 2.644 ms | 45 ms | 65 ms | 2.769 ms |
Vorlage: HTML oder Markdown mit den JSON-Daten füllen. Rendern: Chromium lädt die Seite, setzt sie und druckt sie. Abschluss: PDF aufräumen oder PNG kodieren. Speichern: die Datei in den Objektspeicher der Region schreiben. Die Summe enthält zusätzlich einige Millisekunden Übergabe zwischen den Stufen. Die Webseite als PDF hat außerdem 726 ms (aufsummiert) für das Laden ihrer Dateien gebraucht, parallel und innerhalb der Renderzeit.
Was die Zahlen zeigen
- Seiten sind günstig, jedes Rendering hat einen festen Anteil. Die zwanzigfache Seitenzahl dauerte 2,2-mal so lange: 124 ms für eine Seite, 200 ms für fünf, 276 ms für zwanzig. Jede weitere Seite kostete also etwa 8 ms. Der größte Teil eines Renderings ist unabhängig von der Länge: die Seite in Chromium laden, setzen, die Datei schreiben.
- Bei kleinen Dokumenten ist das Netzwerk der größte Teil der Wartezeit. Von den 336 ms, die der Aufrufer auf die Rechnung wartete, entfielen 124 ms auf den Renderer. Der Rest war die API (69 ms) und der Weg hin und zurück (120 ms). Ein Aufruf von einem Server nahe der Region verkürzt genau diesen Teil; die HTTPS-Verbindung hat dieser Benchmark bereits wiederverwendet.
- Ausreißer kommen aus dem Netzwerk, nicht aus dem Renderer. Im Renderer blieb p95 bei jedem Dokument unter dem 1,6-Fachen des Medians. Ende zu Ende lag p95 beim Bericht bei 1.380 ms gegenüber einem Median von 469 ms, weil einige Downloads langsam waren. Wer verlässliche Zeiten braucht, misst dort, wo der eigene Code läuft.
- Ein Bild ist nicht günstiger als ein PDF. Das PNG mit 1200 × 630 Pixeln brauchte 396 ms: ein pixelgenauer Screenshot, danach 54 ms PNG-Kodierung und eine Datei von 455 KB zum Speichern und Herunterladen.
- Eine Webseite ist so schnell wie die Seite selbst. Unsere eigene Startseite brauchte im Median 2,8 s: Chromium lädt Schriften, Bilder und Skripte und wartet, bis die Seite zur Ruhe kommt. Wenn Sie den Inhalt selbst haben, ist das HTML zu schicken deutlich schneller als die URL.
- Keine Warteschlange bei dieser Last. Mit einem Rendering nach dem anderen hat ein Renderer jeden Auftrag bei p95 innerhalb von 9 ms übernommen. Wie sich die Wartezeit verhält, wenn viele Renderings gleichzeitig kommen, ist ein anderer Test (siehe Grenzen unten).
- Die Vorlage ist nicht der Engpass. Eine Vorlage mit 128 Tabellenzeilen oder 38 Produkten zu füllen, dauerte im Median höchstens 2 ms.
- Wiederholungen einplanen. Bei 2 von 600 Anfragen brach die
Verbindung ab, bevor eine Antwort kam. Schicken Sie mit jedem Rendering einen
Idempotency-Keyund wiederholen Sie bei Netzwerkfehlern: Die Wiederholung liefert dann das erste Ergebnis, statt ein zweites Mal zu rendern.
So haben wir gemessen
Die Dokumente
| Dokument | Eingabe | Ausgabe |
|---|---|---|
| Rechnung | HTML mit Jinja-Platzhaltern und ein JSON-Objekt: 7 Positionen, Summen, Fußzeile | PDF, A4, 1 Seite |
| Markdown-Anleitung | Markdown-Anleitung mit Überschriften, Codeblöcken, einer Tabelle und einer Checkliste | PDF, A4, 2 Seiten |
| Bericht | HTML und JSON: Kennzahlen und 5 Tabellen mit 128 Zeilen, Seitenzahlen in der Fußzeile | PDF, A4, 5 Seiten |
| Produktkatalog | HTML und JSON: Titelseite und 38 Produkte, jedes mit SVG-Grafik und Datentabelle | PDF, A4, 20 Seiten |
| Social-Media-Bild | HTML und JSON: Farbverlauf, Überschrift, Logo | PNG, 1200 × 630 |
| Webseite als PDF | Die URL https://dynamicdocumentapi.com/ mit ihren Schriften, Bildern und Skripten | PDF, A4, 12 Seiten |
Jedes Dokument bringt alles, was es braucht, in der Anfrage mit: keine externen Schriften, Bilder oder Stylesheets. Ausnahme ist die Webseite als PDF, die die Seite lädt wie ein Browser. Alle Namen und Zahlen in den Beispieldaten sind erfunden.
Der Ablauf
- Eins nach dem anderen. Jedes Rendering war ein synchrones
POST /v1/rendersmitdelivery.type = binary, die Antwort war also die Datei selbst. Die nächste Anfrage startete erst, wenn die vorige zurück war, und frühestens 3 Sekunden nach deren Start. - Gemischt. Jede Runde renderte alle sechs Dokumente einmal, in einer je Runde neu gemischten Reihenfolge. Eine langsame Minute traf so alle Dokumente gleich. Die ersten beiden Runden dienten zum Aufwärmen und zählen nicht mit.
- Eindeutige Anfragen. Jede Anfrage hatte einen eigenen
Idempotency-Keyund einen eindeutigen Wert in den Daten. Nichts kam aus einem Cache. - Eine wiederverwendete Verbindung. Eine HTTPS-Verbindung blieb offen, wie bei einem
dauerhaft laufenden Dienst. Ein einfacher authentifizierter API-Aufruf
(
GET /v1/renders?limit=1) dauerte vom Laptop aus 107–123 ms: die Untergrenze jeder Ende-zu-Ende-Zeit. - Drei Uhren.
client_msauf dem Laptop,api_msaus demServer-Timing-Header der API,total_msund die Stufen aus dem Render-Datensatz (GET /v1/renders/{id}). - Perzentile sind lineare Interpolationen zwischen den nächsten Rängen (Pythons
statistics.quantiles, Methode „inclusive“, wie der Standard von NumPy), gerundet auf ganze Millisekunden. - Wann: 19. Oktober 2026, 14:33–15:05 Uhr (MESZ), Engine 2026.4 (Chrome 153.0.8010.47), mit Live-Schlüssel: kein Wasserzeichen, jedes Rendering zählte auf unseren eigenen Tarif.
Was dieser Benchmark nicht zeigt
- Verhalten unter Last. Ein Aufrufer, ein Rendering nach dem anderen. Viele gleichzeitige Renderings können länger auf einen Renderer warten. Dafür gibt es Lasttests, und das hier ist keiner.
- Ihr Netzwerk. Die Ende-zu-Ende-Zeiten stammen von einem Laptop in Deutschland während einer halben Stunde. Von einem anderen Kontinent oder über Mobilfunk ist der Netzwerkanteil größer.
- Ihre Dokumente. Große externe Bilder, Webfonts oder langsame Skripte machen das Rendern langsamer. Die sechs Dokumente hier sind typisch, aber nicht vollständig.
- Andere Dienste. Wir haben nur unsere eigene API gemessen. Messungen anderer Anbieter veröffentlichen wir nicht, weil wir sie nicht unter denselben Bedingungen ausführen könnten.
- Die Zukunft. Das sind die Zahlen der Engine 2026.4. Wir wollen den Lauf mit neuen Engine-Versionen wiederholen und führen jeden Lauf unten auf.
Unsere Produktseiten nennen einen Median von 216 ms. Diese Zahl ist der Median über 1.664 erfolgreiche Renderings auf Engine 2026.4, eine Mischung verschiedener Dokumente. Dieser Benchmark legt stattdessen die Dokumente fest, damit Sie sehen, wie die Zeit vom Dokument abhängt.
Selbst ausführen
Das Skript braucht Python 3.9 oder neuer und sonst nichts. Laden Sie es mit den sechs Dokumenten
herunter, entpacken Sie es und starten Sie es mit einem API-Schlüssel Ihres Workspaces. Der Schlüssel
wird ohne Anzeige abgefragt oder aus DYNAMIC_DOCUMENT_API_KEY gelesen und nirgends
gespeichert.
python3 render_time.py check --out check # 6 Renderings, Dateien zum Ansehen
python3 render_time.py run --rounds 100 --client "Ihr Laptop, Ihre Stadt"
python3 render_time.py report results/*.csv
Ein Lauf mit 100 Runden macht samt Aufwärmen 612 Renderings. Mit einem Live-Schlüssel zählen sie auf Ihren Tarif. Ein kostenloser Test-Schlüssel geht auch, setzt aber ein Wasserzeichen (etwas mehr Zeit im Abschluss) und ist im Free-Tarif auf 10 Renderings pro Minute begrenzt. Der Lauf dauert dann etwa 70 Minuten.
Häufige Fragen
Wie lange braucht Dynamic Document API, um ein PDF zu rendern?
Im Renderzeit-Benchmark vom 19. Oktober 2026 (Engine 2026.4) hat Dynamic Document API eine einseitige Rechnung im Median in 124 ms gerendert, einen fünfseitigen Bericht in 200 ms und einen Katalog mit 20 Seiten in 276 ms, gemessen im Renderer von der Warteschlange bis zur gespeicherten Datei. Ende zu Ende, von einem Laptop in Deutschland zur EU-API, dauerten dieselben Dokumente im Median 336 ms, 469 ms und 619 ms.
Wie viel Renderzeit kostet jede weitere PDF-Seite?
Im Benchmark von Dynamic Document API vom Oktober 2026 kostete jede Seite nach der ersten etwa 8 ms Renderzeit: Ein PDF mit 20 Seiten dauerte 2,2-mal so lange wie eines mit einer Seite, weil der größte Teil eines Renderings feste Arbeit ist, etwa die Seite in Chromium laden und die Datei schreiben.
Wie lange dauert es, eine Webseite (URL) in ein PDF umzuwandeln?
Die zwölfseitige Startseite von dynamicdocumentapi.com als PDF zu erfassen, dauerte im Benchmark vom Oktober 2026 im Median 2,8 s im Renderer von Dynamic Document API und 3,9 s Ende zu Ende, vor allem für das Laden von Schriften, Bildern und Skripten der Seite. Wer den Inhalt selbst hat, ist mit HTML statt URL deutlich schneller.
Wie schnell erzeugt man ein PNG-Bild aus HTML?
Dynamic Document API hat im Benchmark vom Oktober 2026 ein Social-Media-Bild mit 1200 × 630 Pixeln aus HTML im Median in 396 ms im Renderer erzeugt, Ende zu Ende in 760 ms, davon 54 ms für die PNG-Kodierung.
Wie wurde der Renderzeit-Benchmark gemessen?
Sechs feste Dokumente wurden je 100-mal gerendert, immer eine Anfrage nach der anderen, über die Produktions-API von Dynamic Document API in der EU am 19. Oktober 2026, mit Live-Schlüssel und ohne Wasserzeichen. Jedes Rendering wurde im Renderer (total_ms), in der API (Server-Timing) und auf dem Client gemessen; Skript, Dokumente und Rohdaten sind unter CC BY 4.0 öffentlich.
Daten, Diagramm und Zitat
- Rohdaten (CSV, 600 Renderings): eine Zeile je Rendering mit allen drei Uhren und allen Stufen
- Zusammenfassung (JSON): Perzentile je Dokument
- Diagramm (SVG)
- Skript und Dokumente (ZIP)
- Diese Seite als Markdown (Englisch), für Sprachmodelle und eigene Notizen
Daten und Diagramm stehen unter CC BY 4.0: Verwenden Sie sie in eigenen Artikeln, Vergleichen und Präsentationen, solange Sie Dynamic Document API nennen und auf diese Seite verlinken. Ein Vorschlag zum Zitieren:
Dynamic Document API (2026). Renderzeit-Benchmark, Oktober 2026. https://dynamicdocumentapi.com/de/benchmarks/renderzeit/
Läufe
| Datum | Engine | Hinweis |
|---|---|---|
| 19. Oktober 2026 | 2026.4 (Chrome 153) | Erster Lauf: sechs Dokumente, je 100 Renderings, Live-Schlüssel |
Fragen zur Methode, oder ein Dokument, das wir messen sollen? Schreiben Sie an support@dynamicdocumentapi.com.