Подтвердить что ты не робот

Когда происходит переполнение в среде DOM?

Какие виды действий вызовут оплату веб-страницы с помощью DOM?

Кажется, существуют разные точки зрения. Согласно http://www.nczonline.net/blog/2009/02/03/speed-up-your-javascript-part-4/, это происходит

  • Когда вы добавляете или удаляете DOM node.
  • При динамическом применении стиля (например, element.style.width = "10px" ).
  • Когда вы извлекаете измерение, которое должно быть рассчитано, например, обращение к offsetWidth, clientHeight или любому вычисленному значению CSS (через getComputedStyle() в DOM-совместимых браузерах или currentStyle в IE).

Однако, согласно http://dev.opera.com/articles/view/efficient-javascript/?page=3, включение триггеров срабатывания происходит только тогда, когда в очереди уже выполнено действие reflow.

Есть ли у кого-нибудь идеи?

4b9b3361

Ответ 1

Обе статьи верны. Можно с уверенностью предположить, что всякий раз, когда вы делаете что-то, что может разумно потребовать, чтобы размеры элементов в DOM вычислялись, вы будете активировать оплату.

Кроме того, насколько я могу судить, обе статьи говорят одно и то же.

В первой статье говорится, что reflow происходит, когда:

Когда вы извлекаете измерение, которое должно быть рассчитано, например, доступ к offsetWidth, clientHeight или любому вычисленному значению CSS (через getComputedStyle() в DOM-совместимых браузерах или currentStyle в IE), в то время как изменения DOM помещаются в очередь, чтобы они были сделаны.

Во второй статье говорится:

Как уже говорилось ранее, браузер может кэшировать несколько изменений для вас и плавать только один раз, когда все эти изменения были сделаны. Однако обратите внимание, что измерение измерений элемента заставит его оплатить, чтобы измерения были правильными. Изменения могут быть или не быть явно перекрашены, но сам рефлекс все же должен произойти за кулисами.

Этот эффект создается, когда измерения выполняются с использованием таких свойств, как offsetWidth, или с использованием таких методов, как getComputedStyle. Даже если числа не используются, просто используя любой из них, пока браузер все еще кэширует изменения, будет достаточно, чтобы вызвать скрытый пересчет. Если эти измерения повторяются неоднократно, вам следует рассмотреть их только один раз и сохранить результат, который затем можно будет использовать позже.

Я считаю, это означает то же самое, что они говорили ранее. Opera будет пытаться изо всех сил кэшировать значения и не переплачивать за вас, но вы не должны полагаться на ее способность делать это.

Во всех смыслах и целях просто верьте тому, что они оба говорят, когда говорят, что все три типа взаимодействий могут вызвать оплату.

Приветствия.

Ответ 3

document.body.style.display = 'none';
document.body.style.display = 'block';

Это часто решает эти непонятные ошибки макета.