Я знаю, что установка свойств стиля приводит к переформатированию браузера. Возможно ли, что перекомпоновка браузера также происходит при доступе к свойствам макета. Если да, не могли бы вы привести конкретный пример, почему это может вызвать перекомпоновку браузера?
Может ли доступ к информации о макете вызвать перекомпоновку браузера?
Ответы (4)
Конечно, это зависит от реализации, но обычно браузер запускает перекомпоновку при чтении свойства элемента, если он считает, что данные макета необходимо повторно запросить (например, некоторые свойства, связанные с макетом, в этом элементе или любой родительский элемент изменился).
Вы можете найти список затронутых свойств для WebKit здесь: Как (не) активировать макет в WebKit. Более общая статья с примерами: Визуализация: перерисовка, перекомпоновка/релейаут, изменение стиля
Получение свойств может быть (см. ниже), но изменение свойств будет. Свойства, связанные со стилем, такие как ele.width
для экземпляров. Свойства местоположения, такие как src
тега iframe или img, будут.
Также обратите внимание, что присоединение прослушивателей событий (on*=...
, addEventListener(*,...)
и т. д.) вызывает перекомпоновку. Это происходит из-за того, что события передаются от самого внешнего родительского элемента к элементу src и всплывают из элемента src через цепочку родительских элементов.
Более того, современные браузеры (например, Chrome) задерживают обновление графического интерфейса, если указанная страница не просматривается. Это вызывает перекомпоновку, когда страница снова становится активной из-за того, что браузер проверяет правильность отображения страницы. Эта задержка/очередь может привести к тому, что свойства получения будут выглядеть так, как будто они вызывают перекомпоновку, когда на самом деле браузер следит за тем, чтобы они отображались правильно.
Если вы не меняете свойство CSS, а только обращаетесь к нему, то нет, страницу не нужно будет перерисовывать.
Я знаю, что это поздно для игры, и это отвечает так, как вы можете найти, если вы прочитаете ссылки, которые уже разместили другие, но это заслуживает того, чтобы прямо указать здесь:
Перед браузером стоит задача предоставить вам текущее значение, поэтому, как правило, он будет переформатировать и перерисовывать, чтобы убедиться, что то, что у вас есть, соответствует значению прямо сейчас. Я считаю, что это помогает думать об этом таким образом: КАЖДЫЙ РАЗ, когда вы запрашиваете положение или размер ЛЮБОГО ЭЛЕМЕНТА на странице, вы можете предположить, что собираетесь вызвать перекомпоновку/перерисовку. Нет, это не всегда верно на 100%, но это достаточно близко к 100%, что вам следует просто предположить, если вы запрашиваете верх, лево, низ, право, высоту, ширину или что-либо, что влияет на эти измерения (например, масштаб, вращение). и т. д.), вы вызовете R/R. Это самый конкретный ответ, который я могу вам дать.
Опять же, это не всегда верно на 100 %, но я считаю, что если вы думаете об этом таким образом, это поможет в 98 % случаев, когда это правда, и не повредит, как много для других 2%, так как это помогает для 98.