Every performance claim on this site is backed by reproducible measurements. This page documents the exact corpus, hardware, tooling, and versions used.
/opt/xfa-corpus/curated-20kCorpus is stored on the VPS at /opt/xfa-corpus/curated-20k. Statistics generated via ls + awk.
powersave — results are conservative; performance governor would be fasterThis is a dedicated server — no noisy neighbours. CPU governor is set to powersave, so results are conservative compared to performance mode.
| Test | PDFluent | iText 8 | PDFBox | Nutrient |
|---|---|---|---|---|
| Cold start (single page render) JVM not pre-warmed for iText/PDFBox. Competitor values are typical reference ranges. | 1 ms | ~500–800 ms | ~400–700 ms | ~80–150 ms |
| PDF/A validation (13 pages) | 52 ms | — | — | — |
| Text extraction (per document avg) 100 documents, mixed page counts. Average 50 ms/doc. | 50 ms | — | — | — |
| XFA flatten (single form) iText requires pdfXFA add-on; Nutrient and PDFBox have no XFA support. | 3 ms | — | n/a | n/a |
| Render throughput (pages/sec) 100 single-page PDFs batch rendered. iText has no rendering engine. | 917 pg/s | n/a | — | — |
| Memory — peak RSS Single-page render. JVM-based SDKs include JVM heap overhead. | 6 MB | ~150–300 MB | ~100–250 MB | ~50–120 MB |
| WASM bundle (gzip) Compressed .wasm file. Raw: 9.8 MB. | 3.5 MB | n/a | n/a | ~15 MB |
| Library | Version | Runtime / notes |
|---|---|---|
| PDFluent | 1.0.0-beta.1 | Rust 1.75+ (native binary, 13.4 MB) |
| iText 8 | 8.0.4 | OpenJDK 17 (reference data) |
| Apache PDFBox | 3.0.1 | OpenJDK 17 (reference data) |
| Nutrient Web SDK | 24.4.1 | Node.js 20 LTS (reference data) |