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

9.1 KiB
Raw Blame History

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