mirror of
https://github.com/storytold/designcraft.git
synced 2026-11-14 22:35:26 +00:00
The status bar's error count ran the whole-document preflight check on the interface thread for every new state of the document, so every drag step and every typed character waited for it. The Preflight panel ran the same check on every frame. The check composes every story and asks the file system about every linked graphic, so its cost grows with the document: on a 300-page document with 900 placed images it took 137 ms on a fast machine, and moving or resizing a frame and typing became unusable on large documents. The check now runs on a worker thread that takes the newest state of the document; the issues last found stay shown until it answers. An unchanged document is checked again every few seconds for linked files changed outside the app, a save under a new path or a font reload is checked again, and a check blocked on another document's linked file is handed off to a fresh worker after 200 ms. Tests and the web build check on the interface thread, once per state of the document. preflight::check_document takes the document, the composition cache and the save path, so the worker needs no session.