# П13 · 2019-03 · Event loop и async-поведение
Статус: **принят в публикационный слой 31 июля 2026 года**. Registry
применяет ревизии по стабильному slug и не заменяет дату или автора базовой
публикации. Внутри пакета три стабильных slug:
- `editorial-2019-03-practice-event-loop`;
- `editorial-2019-03-mechanism-event-loop`;
- `editorial-2019-03-field-event-loop`.
## Граница материала
- Голос: М2, март 2019 года. Автор уже уверенно разбирает JavaScript-сборку и
границы модулей, но не выдаёт современную observability-платформу за опыт того
периода. Речь прагматична: симптом → причина → проверка → действие.
- Практика учит поставить минимальный опыт для относительного порядка sync,
Promise и timer, а затем отдельно измерить синхронную блокировку.
- Механизм разделяет ECMAScript Jobs, browser task и microtask checkpoint. Он
не обещает одинаковый порядок между разными источниками задач и не называет
`await` перерывом на отрисовку.
- Полевой разбор разделяет два независимых дефекта: устаревший async-результат
и CPU/DOM-работу на main thread. Сценарий учебный; результатов реального
продукта, замеров и конкретного профиля здесь нет.
- Визуальные активы: `event-loop-order-2019.svg`,
`event-loop-frame-budget-2019.svg`, `event-loop-trace-2019.svg`.
## Pass 1 — факты и техника
- Сверены первичные/официальные источники: HTML Standard для event loop и
microtask checkpoint, ECMAScript для Jobs и host hook Promise-реакций, W3C
High Resolution Time для `performance.now()`, W3C Long Tasks API для связи
длинной работы на UI-потоке с задержкой input и рендеринга.
- Формулировки намеренно разделяют язык и браузер: Promise Job не назван
«вторым потоком», а browser task не обещает точный момент запуска.
- Для `setTimeout(fn, 0)` записано корректное ограничение: это будущая задача
после доступности таймера, а не команда выполнить функцию немедленно или
гарантировать кадр.
- В примерах нет выданных за факт benchmark-результатов. Код показывает метод
измерения и ожидаемый относительный порядок; его числа зависят от окружения.
- Полевой пример не говорит, что Promise упорядочивает независимые сетевые
ответы. Актуальность контролируется явным `runId`; отмена названа отдельной
политикой проекта.
- Ветви решения разделены: явная Promise-зависимость для данных, ограниченные
порции/алгоритм/worker для CPU-работы, trace для проверки владельца времени.
- Вердикт: фактическая модель соответствует источникам и не скрывает границы.
## Pass 2 — редактура и голос
- В каждом тексте первые абзацы называют наблюдаемый сбой и цену ошибочной
правки: ложный порядок callback, зависший input или старый результат на
экране.
- Основная композиция сохраняет маршрут «симптом → причина → проверка →
действие». Термины `stack`, `microtask`, `task`, `trace`, `runId` появляются
рядом с проверяемым объектом, а не как украшение.
- Убраны обещания «Promise ускорит код», «таймер гарантирует кадр» и
«одна очередь объясняет всё». В конце каждого текста указаны ограничения.
- Тон остаётся уровнем М2: автор работает с Console, DevTools и небольшими
адаптерами, а не приписывает себе поздние практики SLO-платформы или
наблюдаемости 2025–2027 годов.
- Объём рассчитан как основной прозаический текст без кода, таблиц, рисунков
и источников; граница 5 000–15 000 знаков проверяется модулем при импорте.
- Вердикт: техническая речь краткая и предметная, без общих рекламных фраз.
## Pass 3 — визуал и выпуск
- У каждой статьи собственная SVG-схема с содержательным alt и подписью:
порядок stack/microtask/task; длинная работа на main thread; маршрут
диагностики от лога к действию.
- Во всех трёх статьях есть доступная таблица с `thead` и `scope="col"`,
несколько блоков кода, нумерованный план действий и раздел источников с
официальными ссылками.
- SVG используют локальные пути внутри `web/public/assets/editorial/2019/`;
скрипт ссылается только на эти три assets.
- Выполнены Node syntax, JSON-only CLI/import-safe проверка, `npm run
audit:draft`, XML-проверка всех SVG и ручной визуальный просмотр.
- Первый визуальный проход на ширине 375 px выявил слишком мелкие подписи в
горизонтальных вариантах. Все три SVG перестроены в вертикальную композицию;
повторный рендер на 375 px подтвердил, что карточки, стрелки и подписи не
обрезаются и читаются без горизонтальной прокрутки.
- Production build, registry и `articles.json` намеренно находятся вне этого
пакета и не должны упоминаться как выполненные до отдельной интеграции.
- Вердикт: автономный визуальный и выпускной проход принят. Интеграционный
ревью остаётся отдельной операцией.
## Фактические проверки
| Проверка | Команда или метод | Результат |
| --- | --- | --- |
| Node syntax | `node --check scripts/upgrade-2019-03.mjs` из `web/` | успешно |
| JSON-only CLI | `node scripts/upgrade-2019-03.mjs --print-revisions` | успешно: stdout распарсен как JSON; export и CLI используют одну ревизию |
| Import-safe и content gate | `npm run audit:draft -- scripts/upgrade-2019-03.mjs` из `web/` | успешно: 9 851, 9 896 и 11 104 знака основного HTML |
| XML | `xmllint --noout public/assets/editorial/2019/event-loop-order-2019.svg public/assets/editorial/2019/event-loop-frame-budget-2019.svg public/assets/editorial/2019/event-loop-trace-2019.svg` из `web/` | успешно |
| Визуал | Sharp-рендер SVG и ручной просмотр на 600 px и 375 px | успешно после вертикальной перестройки |
## Выпусковой вердикт
Пакет прошёл автономный тройной review: фактический/технический, редакторский
и визуально-выпускной. После подключения registry основной редактор повторил
строгий аудит всех трёх slug: 9 851 / 9 896 / 11 104 знака, figure, таблицы,
код, маршрут и источники прошли. npm run build завершился с
кодом 0 и сгенерировал 374 статические страницы.
Выпусковой вердикт: **принят к публикации**. articles.json не
менялся; registry заменяет только редакционные поля по стабильному slug.