什么样的活动会触发带DOM的网页回流?
似乎有不同的观点。根据 http://www.nczonline.net/blog/2009/02/03/speed-up-your-javascript-part-4/ ,它发生了
- 添加或删除 DOM 节点时。
- 当您动态应用样式时(例如 element.style.width=“10px”)。
- 当您检索必须计算的测量值时,例如访问 offsetWidth、clientHeight 或任何计算的 CSS 值(通过兼容 DOM 的浏览器中的 getComputedStyle() 或 IE 中的 currentStyle)。
但是,根据 http://dev.opera.com/articles/view/efficient-javascript/?page=3 ,仅当已经有回流操作排队时,进行测量才会触发回流。
有人有更多的想法吗?
原文由 Morgan Cheng 发布,翻译遵循 CC BY-SA 4.0 许可协议
两篇文章都是正确的。可以安全地假设,无论何时您正在做一些可能合理地要求计算 DOM 中元素的尺寸的事情,您都会触发回流。
此外,据我所知,两篇文章都说了同样的话。
第一篇文章说回流发生在:
第二条规定:
我认为这与他们之前所说的意思相同。 Opera 会尽最大努力为您缓存值并避免回流,但您不应该依赖它这样做的能力。
出于所有意图和目的,只要相信他们所说的所有三种类型的交互都会导致回流。
干杯。