В чем разница между reflow и repaint?
Я немного неясен о разнице между reflow + repaint (если есть какая-либо разница вообще)
похоже, что reflow может смещать положение различных элементов DOM, где repaint просто рендеринг нового объекта. Е. Г. оплавления бы произойти при удалении элемента и перекрасить будет происходить при изменении его цвета.
Это правда?
4 ответов
эта публикация, похоже, охватывает проблемы производительности reflow vs repaint
Что касается определений, из этого поста:
A перекрашивать возникает при изменении к элементам кожи, которая меняется заметно, но не влияет на свое макет.
примеры этого включают
outline
,visibility
,background
, илиcolor
. Согласно Opera, перекраска дорого, потому что браузер должен проверьте видимость всех остальных узлы в дереве DOM.A reflow is еще более важно для производительности потому что это включает в себя изменения, которые повлиять на компоновку части страница (или вся страница).
примеры, которые вызывают reflows включают: добавление или удаление содержимого, явно или неявно изменение
width
,height
,font-family
,font-size
и многое другое.
узнайте, какой эффект css-properties перекрасить и просмотреть в http://csstriggers.com
на мой взгляд, перекраска просто влияет на сам DOM, но reflow влияет на всю страницу.
перекраска происходит, когда некоторые изменения, которые только его стили кожи, такие как цвет и видимость.
Reflow происходит, когда страница DOM изменяет свой макет.
недавно я нашел сайт, который может искать, какой атрибут вызовет перекраску или оплавление. http://csstriggers.com/
вот еще один отличный пост: http://blog.letitialew.com/post/30425074101/repaints-and-reflows-manipulating-the-dom
перерисовка или перерисовка проходит через все элементы и определяет их видимость, цвет, контур и другие свойства визуального стиля, а затем обновляет соответствующие части экрана.
a reflow вычисляет макет страницы. Оплавление элемента пересчитывает размеры и положение элемента и он также запускает дальнейшие отражения на дочерних элементах, предках и элементах этого элемента, которые появляются после него в DOM. Затем он вызывает окончательную перекраску. Оплавление очень дорого.
Он также введен, когда происходит оплавление и как минимизировать оплавление.
Reflow происходит, когда происходит изменение макета DOM. Reflow очень дорого вычислительно, так как размеры и положения элементов страницы должны быть вычислены снова, тогда экран будет перекрасился.
пример чего-то, что вызовет оплавление
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 новых элементов абзаца.
перекрашивать - это просто изменение пикселей на мониторе, при этом все еще облагая его меньшим из двух зол, так как оплавление включает перекраску в свою процедуру.