Skip to content

Speed up repeated zooming on large vector PDFs - #320

Merged
DutchSailor merged 20 commits into
mainfrom
codex/research-improvement-vector
Jul 29, 2026
Merged

Speed up repeated zooming on large vector PDFs#320
DutchSailor merged 20 commits into
mainfrom
codex/research-improvement-vector

Conversation

@DutchSailor

@DutchSailor DutchSailor commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Samenvatting

Versnelt herhaald in- en uitzoomen op grote vector-PDF's door een scherpe zichtregio als herbruikbare coverage-tegel in het geheugen te houden. De branch bevat daarnaast de gefaseerde benchmark- en stabiliteitsverbeteringen die nodig waren om alleen aantoonbare winst te behouden.

Wat is gewijzigd

  • selecteer gecachte tegels op volledige viewportdekking én fysieke schermresolutie, niet alleen op een exacte zoombucket;
  • bouw een brede 150%-zichtregio, wanneer die binnen de bestaande 4096px-aslimiet past, met voldoende dichtheid voor 300%;
  • behoud dezelfde scherpe coverage-tegel bij zowel in- als uitzoomen;
  • sla de 150ms freeze/snapshot over als de huidige tegel de toekomstige viewport al volledig en scherp dekt;
  • dedupliceer zware scene-probes en voorkom dat extreme fallback-parses over meerdere workers worden vermenigvuldigd;
  • maak de benchmark HiDPI- en viewportdekkingbewust;
  • behoud het bestaande begrensde renderpad als een coverage-bitmap niet binnen de aslimiet past.

Oorzaak

De eerdere cache was primair georganiseerd rond zoombuckets. Daardoor kon een tegel met voldoende pixels toch worden verworpen omdat hij uit een andere bucket kwam, of kon bij uitzoomen een brede scherpe tegel worden vervangen door een smallere tegel. Vervolgens werd opnieuw gerenderd en bleef ook de vaste freeze-wachttijd actief.

Praktijkresultaten

Na het gereedkomen van de eerste scherpe zichtregio, gemeten over twintig opeenvolgende sprongen 150% ↔ 300% per bestand:

Bestand Mediaan p95 Maximum Cachemissers
MV-03, pagina 1 38,9 ms 47,2 ms 62,1 ms 0
NKD1a, pagina 2 31,4 ms 32,4 ms 67,6 ms 0

De eerste render van een nog niet gecachte zichtregio blijft afhankelijk van de PDF-complexiteit. Deze wijziging voorkomt dat dit werk bij iedere volgende zoomstap opnieuw gebeurt.

Validatie

  • npm run test:unit: 87/87 geslaagd;
  • npm run build: geslaagd;
  • live dev-build getest op beide verificatie-PDF's;
  • twintig afwisselende 150%/300%-sprongen per bestand zonder cachemissers;
  • meetmethode vereist correcte zoom, volledige viewportdekking en renderScale >= zoom × devicePixelRatio.

Het volledige meetrapport stond in docs/performance/2026-07-29-vector-pdf-zoom-results.md. De latere praktijkregressie en revert worden afgehandeld in PR #321.

@DutchSailor
DutchSailor merged commit c023a63 into main Jul 29, 2026
1 of 4 checks passed
@DutchSailor DutchSailor changed the title Speed up repeated zooming on large vector PDFs Revert regressive vector PDF zoom experiment Jul 30, 2026
@DutchSailor DutchSailor changed the title Revert regressive vector PDF zoom experiment Speed up repeated zooming on large vector PDFs Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant