9.1 KiB
9.1 KiB
П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.