intermediate

Layout

Рассчитывайте geometry из styles, content, fonts, viewport, constraints и DOM-изменений, способных вызвать reflow.

Layout вычисляет геометрию элементов из style, content, шрифтов, размера viewport, writing mode и ограничений. Чтение offsetWidth или getBoundingClientRect может синхронно завершить отложенные style и layout. В ответах про производительность — батч reads до writes и отказ от циклов, зависящих от layout.

					// Плохо: чередование read/write — sync layout на каждый элемент
for (const row of rows) {
  row.style.height = row.offsetHeight + 10 + 'px';
}

// Лучше: сначала все read, потом все write
const heights = rows.map((row) => row.offsetHeight + 10);
rows.forEach((row, i) => { row.style.height = heights[i] + 'px'; });
				

requestAnimationFrame объединяет визуальные обновления в следующий кадр, но не убирает лишний layout.

На интервью: найдите forced reflow и давление на frame budget в медленном resize или scroll.

Типовые ошибки: один forced layout допустим; опасен read-write цикл по многим узлам.

Компромисс: удобство против контроля — выбирайте механизм под вашу связность и бюджет производительности.

Чеклист:

  • Батч reads, затем writes.
  • Не измеряйте внутри плотных циклов.
  • ResizeObserver вместо шторма window resize.
  • Профилируйте layout в Performance.