Reflow происходит при изменении макета DOM. Перекомпоновка очень затратна в вычислительном отношении, так как размеры и положение элементов страницы необходимо вычислять заново, а затем экран будет перекрашен .
Пример того, что вызовет оплавление
for (let i = 1; i <= 100; i++ {
const newEle = document.createElement('p');
newEle.textContent = 'newly created paragraph element';
document.body.appendChild(newEle);
}
Приведенный выше код очень неэффективен, вызывая 100 процессов перекомпоновки для каждого добавленного нового элемента абзаца.
Вы можете смягчить этот вычислительно напряженный процесс, используя .createDocumentFragment()
const docFrag = document.createDocumentFragment();
for (let i = 1; i <= 100; i++ {
const newEle = document.createElement('p');
newEle.textContent = 'newly created paragraph element';
docFrag.appendChild(newEle);
}
document.body.appendChild(docFrag);
Приведенный выше код теперь будет использовать только процесс перекомпоновки 1x для создания 100 новых элементов абзаца.
Перерисовка - это просто изменение пикселей на мониторе, но все же это меньшее из двух зол, поскольку перерисовка включает в себя перерисовку.