猿问

什么时候在DOM环境中发生再流?

什么时候在DOM环境中发生再流?

什么类型的活动会触发Web页面的DOM再流?

似乎有不同的观点。根据http:/www.nczonline.net/blog/2009/02/03/速度-您的javascript-第4部分/,发生了

  • 添加或删除DOM节点时。
  • 当您动态地应用样式时(例如元素、样式、宽度=“10 px”)。
  • 当您检索必须计算的度量时,例如访问偏移宽度、clientHight或任何计算出来的CSS值(通过兼容DOM的浏览器中的getComputedStyle或IE中的CurentStyle)。

然而,根据http:/dev.opera.com/ports/view/Efficient-javascript/?page=3,只有在已排队的再流操作时,才采取测量触发器的再流。

还有人有什么想法吗?


慕慕森
浏览 402回答 3
3回答

拉莫斯之舞

两篇文章都是正确的。可以安全地假设,每当您在做可能合理需要的事情时,就可以计算DOM中元素的维数,从而触发再流。另外,据我所知,两篇文章都说了同样的话。第一篇文章指出,在以下情况下会发生再流:当你检索必须计算的度量值。,例如访问偏移宽度, 客户高度,或任何计算出来的CSS值(通过getComputedStyle()在兼容DOM的浏览器或IE中的CurentStyle中,而DOM更改则排队等待进行。第二条规定:如前所述,浏览器可能会为您缓存几个更改,并且在所有这些更改都已完成时,只会再流一次。但是,请注意测量这个元素会迫使它重新流动。,以便测量结果是正确的。这些变化可能被或可能不会被明显地重新描绘,但回流本身仍然必须发生在幕后。此效果是在使用以下属性进行测量时创建的偏移宽度,或者使用类似的方法getComputedStyle..即使没有使用这些数字,只要在浏览器仍在缓存更改时使用这些数字,就足以触发隐藏的再流。如果这些测量是反复进行的,您应该考虑只进行一次测量,并存储结果,然后可以在以后使用。我认为这和他们之前说的一样。Opera将尽力缓存值,并避免为您重新流,但您不应该依赖它的能力这样做。对于所有的意图和目的,只要相信他们都说的话,当他们说这三种类型的互动可以导致回流。干杯。

万千封印

查看“属性读取访问触发的呈现”部分。理解InternetExplorer呈现行为,其中IE中的以下代码将导致呈现活动。function askforHeight () {   $("#lower").height();  }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答