JS JavaScript  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  ·  👥 1 прошёл

Производительность веб-приложения

Профессиональный тест о профилировании, памяти, долгих задачах и загрузке. Вопросы требуют отличать измеренный узкий участок от догадки, читать причинную цепочку рендеринга, находить удерживающие ссылки и выбирать оптимизацию, которая улучшает пользовательскую задержку, а не только лабораторный счётчик.

Отвечено: 0 из 30
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов и 85 минут; код лучше читать построчно, не полагаясь на первое впечатление. После завершения откроются общий процент, 6 тематических шкал и объяснение каждого решения.
Вопрос 1 из 30
Что означает широкий блок функции в flame chart?
JavaScript
function renderPage(data) {
  const model = normalize(data);
  return render(model);
}
Вопрос 2 из 30
Как измерить конкретный пользовательский этап без console.time вокруг всего приложения?
JavaScript
performance.mark("search-start");
await runSearch();
performance.mark("search-end");
performance.measure("search", "search-start", "search-end");
Вопрос 3 из 30
Почему один прогон недостаточен для сравнения оптимизации?
JavaScript
for (let i = 0; i < 30; i++) samples.push(await benchmark());
Вопрос 4 из 30
Что показывает Network waterfall лучше CPU profile?
HTML/XMLРесурсы страницы
<script type="module" src="/app.js"></script>
<link rel="preload" href="/critical.woff2" as="font" crossorigin>
Вопрос 5 из 30
Какую метрику выбрать для жалобы «клик ощущается вязким»?
Вопрос 6 из 30
Почему удалённый modal остаётся в heap?
JavaScript
const cache = new Map();
function mount() {
  const modal = createModal();
  cache.set("last", modal);
  document.body.append(modal);
  return () => modal.remove();
}
Вопрос 7 из 30
Как таймер создаёт утечку компонента?
JavaScript
function mount(panel) {
  const id = setInterval(() => update(panel), 1000);
  return () => clearInterval(id);
}
Вопрос 8 из 30
Почему Map-кэш с DOM-узлами опаснее WeakMap для метаданных?
JavaScript
const metadata = new WeakMap();
metadata.set(element, { mountedAt: Date.now() });
Вопрос 9 из 30
Что сравнивать в двух heap snapshots?
Вопрос 10 из 30
Почему рост памяти не всегда утечка?
Вопрос 11 из 30
Почему queueMicrotask не отдаёт браузеру возможность отрисовать между порциями?
JavaScript
function step() {
  doChunk();
  queueMicrotask(step);
}
step();
Вопрос 12 из 30
Как разбить CPU-работу, сохранив отзывчивость?
JavaScript
async function processAll(items, signal) {
  for (let i = 0; i < items.length;) {
    const end = Math.min(i + 500, items.length);
    while (i < end) consume(items[i++]);
    signal.throwIfAborted();
    await nextTask();
  }
}
Вопрос 13 из 30
Когда Web Worker даст наибольший эффект?
JavaScript
worker.postMessage(input, transferable);
worker.onmessage = event => show(event.data);
Вопрос 14 из 30
Что такое long task в контексте браузера?
JavaScriptДолгая задача главного потока
button.addEventListener("click", () => {
  const end = performance.now() + 120;
  while (performance.now() < end) {}
});
Вопрос 15 из 30
Почему debounce не исправляет тяжёлую функцию после последнего ввода?
Вопрос 16 из 30
Что даст dynamic import редкому редактору?
JavaScript
button.addEventListener("click", async () => {
  const { openEditor } = await import("./editor.js");
  openEditor();
});
Вопрос 17 из 30
Почему preload десяти некритичных файлов может ухудшить первый экран?
HTML/XMLHTML
<link rel="preload" href="rare-widget.js" as="script">
Вопрос 18 из 30
Как loading="lazy" влияет на изображение ниже первого экрана?
HTML/XMLHTML
<img src="gallery-42.jpg" loading="lazy" alt="...">
Вопрос 19 из 30
Почему долгий cache-control для файла app.js без hash опасен?
ТекстЗаголовки ответа app.js
Cache-Control: public, max-age=31536000, immutable
Content-Type: text/javascript
Вопрос 20 из 30
Что важнее минимизации каждой маленькой chunk отдельно?
Вопрос 21 из 30
Почему regression test на время должен использовать допуск/распределение?
JavaScript
expect(median(samples)).toBeLessThan(baseline * 1.15);
Вопрос 22 из 30
Как связать ухудшение с выпуском?
JavaScript
reportMetric({ name, value, buildId: APP_BUILD });
Вопрос 23 из 30
Почему лабораторный быстрый ноутбук недостаточен?
Вопрос 24 из 30
Что сохранить вместе с профилем?
Вопрос 25 из 30
Почему «после минификации быстрее» может быть ложным выводом?
Вопрос 26 из 30
Когда memoizing render model полезен?
JavaScript
const model = memoizeById(buildModel);
render(model(entity));
Вопрос 27 из 30
Почему виртуализация списка может усложнить доступность?
Вопрос 28 из 30
Что делать с ручным object pool в обычном JS?
Вопрос 29 из 30
Почему алгоритмическое изменение обычно сильнее микроправки syntax?
Вопрос 30 из 30
Как документировать сложную оптимизацию?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe)

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу