Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在DOM环境中何时发生回流?_Javascript_Performance_Dom_Reflow - Fatal编程技术网

Javascript 在DOM环境中何时发生回流?

Javascript 在DOM环境中何时发生回流?,javascript,performance,dom,reflow,Javascript,Performance,Dom,Reflow,什么样的活动会触发具有DOM的网页回流 似乎有不同的观点。据报道,这种情况经常发生 添加或删除DOM节点时 动态应用样式时(例如element.style.width=“10px”) 检索必须计算的度量值时,例如访问offsetWidth、ClientHight或任何计算的CSS值(通过符合DOM的浏览器中的getComputedStyle()或IE中的currentStyle) 然而,根据,只有当回流操作已排队时,进行测量才会触发回流 还有人有其他想法吗 document.body.sty

什么样的活动会触发具有DOM的网页回流

似乎有不同的观点。据报道,这种情况经常发生

  • 添加或删除DOM节点时
  • 动态应用样式时(例如element.style.width=“10px”)
  • 检索必须计算的度量值时,例如访问offsetWidth、ClientHight或任何计算的CSS值(通过符合DOM的浏览器中的getComputedStyle()或IE中的currentStyle)
然而,根据,只有当回流操作已排队时,进行测量才会触发回流

还有人有其他想法吗

document.body.style.display = 'none';
document.body.style.display = 'block';
这通常可以解决那些无法理解的布局错误。

这两篇文章都是正确的。 可以安全地假设,每当您在做一些合理地要求计算DOM中元素的维度的事情时,您将触发回流

此外,据我所知,这两篇文章说的是同一件事

第一篇文章说回流发生在:

当您检索必须计算的度量值时,例如访问offsetWidthclientHeight,或任何计算的CSS值(通过符合DOM的浏览器中的getComputedStyle()或IE中的currentStyle),而DOM更改将排队等待进行

第二条规定:

如前所述,浏览器可能会为您缓存多个更改,并且仅在这些更改全部完成后回流一次。但是,请注意,对元件进行测量将迫使其回流,以便测量结果正确。这些变化可能会也可能不会明显地重新喷漆,但回流本身仍必须在幕后进行

当使用诸如offsetWidth之类的属性或诸如getComputedStyle之类的方法进行测量时,会创建此效果。即使不使用这些数字,只要在浏览器仍在缓存更改时使用其中任何一个,就足以触发隐藏的回流。如果重复进行这些测量,则应该考虑只使用一次,然后存储结果,然后再使用。

我认为这和他们之前说的意思是一样的。Opera将尽最大努力为您缓存值并避免回流,但您不应该依赖它的能力

无论出于何种目的,只要相信他们所说的,当他们说所有三种类型的交互作用都会导致回流时

干杯。

查看的“由属性读取访问触发的渲染”部分,IE中的以下代码将导致渲染活动

function askforHeight () {
  $("#lower").height();  
}

不同的浏览器表现不同。除非它们表现相同。;)查看Paul Irish的演讲:回流是由高度、宽度、偏移宽度等的变化引起的。绝对定位确实如此。除了回流之外,有没有办法强制重新喷漆?为了以较小的增量呈现较大的页面,从而提高最终用户感知的呈现速度。@coderjoe,“对元素进行测量将迫使其回流”,为什么它们没有缓存在浏览器中?如果我在对方之后立即调用getComputedStyle 3次会发生什么!我会有3次回流!我遇到了一个ie6错误,它在错误的地方显示了swf。通过设置
swfObj.style.display=“block”
Wow解决,您还需要支持IE6吗?保持强壮,士兵。