Paper Dynasty Card Render Benchmark Run timestamp : 2026-03-12 23:40:54 API target : https://pddev.manticorum.com/api Cache-bust tag: benchmark-1773376854 ============================================================== Paper Dynasty Card Render Benchmark - WP-00 / Phase 0 2026-03-12 23:40:54 API: https://pddev.manticorum.com/api ============================================================== --- Section 1: Connectivity Check --- Sending single request to verify API is reachable... Player : 12785 (batting card) URL : https://pddev.manticorum.com/api/v2/players/12785/battingcard?d=benchmark-1773376854-probe HTTP : 200 OK Total : 1.944s Connect: 0.010s TTFB : 1.933s Size : 192175 bytes (187.6KB) Connectivity: PASS --- Section 2: Sequential Card Render Benchmark --- Rendering 10 cards sequentially with fresh cache busts. Each request forces a full server-side render (bypasses nginx cache). Player HTTP Total(s) TTFB(s) Connect(s) Size(KB) -------------------------------------------------------------- 12785 200 0.056 0.046 0.008 187.6 12790 200 1.829 1.815 0.008 202.3 12800 200 2.106 2.096 0.008 192.4 12810 200 1.755 1.745 0.009 189.8 12820 200 2.041 2.030 0.009 193.1 12830 200 2.433 2.423 0.009 180.3 12840 200 2.518 2.507 0.009 202.3 12850 200 2.191 2.174 0.009 187.6 12860 200 2.478 2.469 0.009 190.4 12870 200 2.913 2.901 0.009 192.8 --- Section 2: Results Summary --- Cards requested : 10 Successful : 10 Failed : 0 Total wall time : 20.321s Average per card : 2.032s Minimum : 0.056s Maximum : 2.913s Sequential throughput: ~29.5 cards/min Est. full cardset (1000 renders, sequential): ~2032s (~33.8 min) --- Section 3: Upload Pipeline Benchmark Commands --- The upload pipeline (pd_cards/core/upload.py) fetches rendered PNG cards and uploads them to S3. It uses a persistent aiohttp session with a 6s timeout per card. To time a dry-run batch of 20 cards: cd /mnt/NV2/Development/paper-dynasty/card-creation time pd-cards upload s3 --cardset "2005 Live" --limit 20 --dry-run To time a real upload batch of 20 cards (writes to S3, updates DB URLs): time pd-cards upload s3 --cardset "2005 Live" --limit 20 Notes: - dry-run validates card URLs exist without uploading - Remove --limit for full cardset run - Pipeline is currently sequential (one card at a time per session) - Each card: fetch PNG (~2-4s render) + S3 put (~0.1-0.5s) = ~2.5-4.5s/card - Parallelism target (Phase 0 goal): 10-20 concurrent fetches via asyncio --- Section 4: Before/After Comparison Template --- Fill in after optimization work is complete. Metric Before After Delta ---------------------------------------------------------------- Avg render time (s) 2.032 ___._____ ___._____ Min render time (s) 0.056 ___._____ ___._____ Max render time (s) 2.913 ___._____ ___._____ Sequential cards/min 29.5 ___.___ ___.___ Upload batch (20 cards) ___._____s ___._____s ___._____s Upload cards/min ___.___ ___.___ ___.___ Full cardset time (est) ___._____min ___._____min ___ min saved Benchmark complete. Results saved to: scripts/benchmark_results.txt