Это не так просто, и это потому, что вы, вероятно, не совсем понимаете, как работает Обновление DOM + процесс рендеринга .
DOM - это просто объект javascript, как любойпрочее.
Когда вы выполняете манипуляции с DOM, это действительно похоже на изменение свойств простого объекта (сложного, но все же).
Некоторые из этих манипул действительно могут испортитьмакет страницы и отображаемый фрейм, но в целом браузеры будут ждать, пока им действительно придется выполнить операцию перерисовки, прежде чем запускать оба этих алгоритмаЭто означает, что эти алгоритмы не будут запускаться при каждой отдельной манипуляции с DOM.
Итак, чтобы ответить на вопрос, когда DOM манипулирует, вы изменяете свойства объекта js и, возможно, устанавливаете флаг, сообщая обоиммакет recalc и средство визуализации, которое им придется задействовать при следующем обновлении экрана.
Когда эти layout recalc (он же reflow ) и операции перерисовки фактически запускаются,не привязанный ни к каким спецификациям, и это именно то место, которое большинство браузеров будут пытаться оптимизировать, и, следовательно, трудно точно определить, как они работают везде.(Хотя указано, что в некоторых случаях reflow должен работать синхронно).
Но мы можем предположить, что если ничего не изменилось, то это будет по крайней мере сокращение.
Например, если в вашем примере #list1
его CSS-свойство display
установлено на none
, то, возможно, будет нечего перерисовывать, то же самое, если вы повторно добавили .blue
стихия синхронно.
Проще говоря,
// js execution
DOM manip => mark layout as dirty
DOM manip => mark layout as dirty
... there may be a lot here
// Before screen refresh
if(layout.isDirty())
layout.recalc() // will itself mark repaint as dirty if needed
if(renderer.isDirty())
rendered.repaint()