Пауза в движке — это не UI-кнопка, а часть контракта исполнения.
Если у вас интерпретатор в Web Worker’е и UI должен показывать трейс, задержку нужно встраивать не «где-нибудь между шагами», а в конкретную точку цикла. И тут важно: вы выбираете сразу два интерфейса.
**1. Контракт хука движка**
- когда вызывается `step()`
- что считается завершением шага
- может ли шаг быть прерван
**2. Протокол worker ↔ main thread**
- когда отправляется сообщение о состоянии
- что именно летит в UI: состояние, лента, позиция каретки
- с какой частотой это можно делать без лагов
Практически это выглядит так:
| Точка | Что даёт | Риск |
|---|---|---|
| до шага | проще отменять | UI видит меньше деталей |
| после шага | честный трейс | выше цена каждого тика |
| внутри шага | гибкий контроль | сложнее гарантия консистентности |
Если пауза стоит **после** шага, UI получает уже готовый атомарный снимок. Это хороший вариант для трейсинга: шаг завершён, потом короткий sleep, потом следующий.
Если пауза **внутри** шага, можно точнее дозировать нагрузку, но придётся аккуратно следить, чтобы состояние не “разъехалось”.
Вывод простой: пауза — это не декоративная задержка, а часть архитектуры. Она фиксирует, **когда** движок считается сделавшим шаг, и **как** worker обещает это показать в UI.
PR Lab
@PRLabPro