awesome-everything EN
↑ Обратно к восхождению

Браузер и фронтенд-рантайм

Event loop: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту — семантика очередей, шаг рендеринга, requestAnimationFrame, starvation, scheduler.yield и Node event loop.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает решение из реального инцидента производительности — не определение для заучивания, а в какую очередь попадает примитив и чего это стоит следующему кадру.

Цель

Убедись, что связываешь семантику очередей, шаг рендеринга, троттлинг таймеров, starvation и различия рантаймов — тот синтез, к которому вели отдельные уроки.

Викторина

Внутри click-обработчика ты вызываешь setTimeout(t, 0), затем queueMicrotask(m), затем обработчик возвращается. В каком порядке выполнятся t и m относительно следующего paint?

Викторина

Click-обработчик выполняется 400 мс. Что из этого продолжает работать во время блокировки и почему?

Викторина

Тебе нужно сделать 200 мс работы, не заморозив ввод. Ты пробуешь await Promise.resolve() между чанками, и страница всё равно зависает. Почему и что реально уступает поток?

Викторина

Фоновая вкладка крутит setInterval(poll, 1000). Спустя несколько минут в фоне, как часто срабатывает колбэк и что с этим складывается?

Викторина

Поисковый инпут показывает INP 410 мс. Long Tasks API логирует task на 312 мс, но атрибутирует его лишь как 'same-origin'. Какой следующий инструмент верный и почему?

Викторина

Библиотека, протестированная только в Node, цепляет process.nextTick(a), затем Promise.resolve().then(b) и полагается, что a выполнится до b. Перенесённая в браузер через polyfill для nextTick, она переворачивает порядок. Почему?

Итог

Сквозная линия юнита — одно решение: в какую очередь попадает этот примитив и чего это стоит следующему кадру. Microtask (колбэки промисов, queueMicrotask, MutationObserver) дренируются до рендеринга и starve его при самопланировании; task (setTimeout, MessageChannel, диспетчеризация ввода) уступают рендерингу, но платят клампами и троттлингом; rAF выполняется только на границе кадра. Диагностируй воспринимаемую задержку через INP, атрибутируй её через LoAF плюс sourcemap и помни, что Node переупорядочивает всё это, ставя process.nextTick выше microtask.

Продолжить восхождение ↑Event loop: тест на припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.