[Prestaties][P1] Documentexport (PDF/DOCX/ODT/EPUB) draait op de UI-isolate en bevriest de app #2629
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2629
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
Een groot document exporteren naar PDF, DOCX, ODT of EPUB laat de app bevriezen tot de export klaar is: geen voortgang, geen annuleren, en het venster reageert niet (Windows toont dan "reageert niet").
Oorzaak
De presentatie-exports zijn al uit de UI-isolate gehaald (
ExportService._offload→Isolate.run,lib/services/export_service.dart:356, met de toelichting "JPEG-hercompressie en PDF-assemblage zijn CPU-zwaar"). De document-exports niet:pw.MultiPage-opmaak endocument.save()op de UI-isolate (lib/services/pdf/document_pdf_renderer.dart:218-258). Voor een document van honderd pagina's met tabellen is dat het zwaarste deel.ZipEncoder().encodeBytes(archive)op de UI-isolate (lib/services/docx/document_docx_export.dart:163,lib/services/odt/document_odt_export.dart:119,lib/services/epub/document_epub_export.dart:107) — Dart-deflate over alle XML en afbeeldingen.Daarbij, voor presentaties:
Isolate.run(body)kopieert de vastgelegdeList<Uint8List>met alle gerasterde dia's naar de nieuwe isolate. Bij 150 dia's met foto's is dat honderden MB extra piekgeheugen bovenop de renders zelf (die tijdens de export onder een tijdelijke imagecache van 1 GB vallen,slide_rasterizer.dart:195).Voorgestelde oplossing
save()inIsolate.run. De callbacks (embedImage,renderMermaid) worden dan een vooraf gevulde map.Archivebouwen mag blijven waar het is;encodeBytesinIsolate.run.TransferableTypedDataoverdragen in plaats van kopiëren.Wat overeind moet blijven
Identieke uitvoer (byte-gelijk waar dat nu zo is), de waarschuwingscallbacks (#1789, #2467) en de web-route (daar geen isolates:
_offloaddoet daarFuture.sync).Toets
Integratietest: export van een document van 150 pagina's; tijdens de export blijft de langste framepauze < 100 ms en reageert Annuleren.
Onderdeel van de prestatie- en stabiliteitsinspectie van 28-10-2026 (EPIC #2637).