Files
huncode 238c1f7688
Build and deploy / deploy (push) Successful in 13s
revise February to May 2019 articles
2026-07-31 10:32:34 +03:00

105 lines
9.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# П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, таблицы,
код, маршрут и источники прошли. <code>npm run build</code> завершился с
кодом 0 и сгенерировал 374 статические страницы.
Выпусковой вердикт: **принят к публикации**. <code>articles.json</code> не
менялся; registry заменяет только редакционные поля по стабильному slug.