Element.setAttribute вызывает перекомпоновку? - PullRequest
0 голосов
/ 21 мая 2019

Я начал изучать внутреннюю работу браузеров и натолкнулся на механизм reflow / repaint , как он применяется к React , но я не хочу отступать).

В общем, я думаю, что все, что заставляет браузеры вычислять значения / видимые изменения, будет вызывать перекомпоновку / перерисовку.

Однако я не могу обернуться вокруг Element.setAttribute.Это запускает перекомпоновку / перерисовку в Chrome?Каков наиболее эффективный способ обновления нескольких атрибутов элемента в дереве dom?

1 Ответ

1 голос
/ 21 мая 2019

Однако я не могу обернуть голову вокруг Element.setAttribute. Является ли триггер переформатировать / перекрасить в Chrome?

setAttribute не имеет прямого отношения к перекраске / перекомпоновке. Это зависит от того, какой атрибут вы устанавливаете и какой элемент вы его устанавливаете. Если вы поменяете value флажка, перерисовка или перекомпоновка не произойдет, но если вы поменяете value для <input type="button">, тогда произойдет перекраска и перекомпоновка.

Какой самый эффективный способ обновить атрибуты нескольких элементов в дом дерево?

Трудно ответить на вопрос «Самый эффективный», потому что каждый браузер можно оптимизировать для выполнения задач с разной скоростью. Но, вообще говоря, вы можете следовать этим рекомендациям:

  1. Никогда не обновляйте DOM из цикла, поскольку каждая итерация Цикл может вызвать перекрашивание / перекомпоновку.

    • Вместо этого вы можете создать строку HTML и, когда цикл равен
      завершите, введите строку один раз и получите все обновления.
    • Вы также можете создавать и работать с элементами, которые еще не добавлены в дерево DOM и существуют только в памяти. Затем вы можете поместить эти элементы в один контейнер, который сам по себе еще не является частью DOM. Наконец, вы можете добавить контейнер в DOM и выполнить операцию перерисовки / перекомпоновки всего один раз.
  2. Если вы выполняете много манипуляций с CSS и испытываете проблемы с производительностью, вы можете захотеть взглянуть на свойство will-change CSS , которое может повысить производительность.

Существует множество доступных ресурсов, чтобы узнать, как снизить производительность:

...