Debounced validatiebundel kost ~42 ms op de UI-thread bij elke typ-pauze op een groot deck #2713

Closed
opened 2026-11-02 22:12:59 +00:00 by brenno · 0 comments
Owner

Probleem

In de deck-broneditor bundelt _scheduleValidation (350 ms debounce) drie volledig-document-scans op de UI-thread. Gemeten op een synthetisch deck van 150 dia's (160 KB, 3906 regels):

  • inspectMarkdownWriting — 34,6 ms (nu 23,5 ms na deze fix)
  • MarkdownValidator.validate — 14,3 ms
  • MarpCompatibility.check — 4,0 ms
  • Totaal ~42 ms piek per typ-pauze

inspectMarkdownWriting compileerde RegExp-objecten per regel én per woord (_plainWord), plus twee replaceAll-scans per regel.

Gedaan in deze PR

Statische patronen, één gecombineerde markup-scan per regel en het vorige woord incrementeel schoongemaakt: 34,6 → 23,5 ms (~32%).

Resterend (vervolg)

  • MarkdownValidator.validate (~14 ms) en MarpCompatibility.check (~4 ms) draaien ongewijzigd mee in dezelfde burst.
  • Structurele optie: de gehele debounced bundel in een isolate (compute) draaien — alle drie de scans zijn pure functies op de bronstring — met discard van verlopen resultaten.
## Probleem In de deck-broneditor bundelt `_scheduleValidation` (350 ms debounce) drie volledig-document-scans op de UI-thread. Gemeten op een synthetisch deck van 150 dia's (160 KB, 3906 regels): - `inspectMarkdownWriting` — 34,6 ms (nu 23,5 ms na deze fix) - `MarkdownValidator.validate` — 14,3 ms - `MarpCompatibility.check` — 4,0 ms - Totaal ~42 ms piek per typ-pauze `inspectMarkdownWriting` compileerde `RegExp`-objecten per regel én per woord (`_plainWord`), plus twee `replaceAll`-scans per regel. ## Gedaan in deze PR Statische patronen, één gecombineerde markup-scan per regel en het vorige woord incrementeel schoongemaakt: 34,6 → 23,5 ms (~32%). ## Resterend (vervolg) - `MarkdownValidator.validate` (~14 ms) en `MarpCompatibility.check` (~4 ms) draaien ongewijzigd mee in dezelfde burst. - Structurele optie: de gehele debounced bundel in een isolate (`compute`) draaien — alle drie de scans zijn pure functies op de bronstring — met discard van verlopen resultaten.
brenno 2026-11-02 22:41:41 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2713
No description provided.