5

DOM 优化操作

 2 years ago
source link: https://toweave.github.io/htmlcss/2019-04-28-dom-verb/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DOM 优化操作

Sunday, April 28th 2019, 10:26:46 am ( ISO 8601 )

渲染树转换为网页布局,称为“布局流”(flow);布局显示到页面的这个过程,称为“绘制”(paint)。它们都具有阻塞效应,并且会耗费很多时间和计算资源。

页面生成以后,脚本操作和样式表操作,都会触发重流(reflow)和重绘(repaint)。用户的互动,也会触发,比如设置了鼠标悬停(a:hover)效果、页面滚动、在输入框中输入文本、改变窗口大小等等。

重流和重绘并不一定一起发生,重流必然导致重绘,重绘不一定需要重流。比如改变元素颜色,只会导致重绘,而不会导致重流;改变元素的布局,则会导致重绘和重流。

大多数情况下,浏览器会智能判断,将重流和重绘只限制到相关的子树上面,最小化所耗费的代价,而不会全局重新生成网页。

作为开发者,应该尽量设法降低重绘的次数和成本。比如,尽量不要变动高层的DOM元素,而以底层DOM元素的变动代替;再比如,重绘table布局和flex布局,开销都会比较大。

  1. 读取DOM或者写入DOM,尽量写在一起,不要混杂
  2. 缓存DOM信息
  3. 不要一项一项地改变样式,而是使用CSS class一次性改变样式
  4. 使用document fragment操作DOM
  5. 动画时使用absolute定位或fixed定位,这样可以减少对其他元素的影响
  6. 只在必要时才显示元素
  7. 使用window.requestAnimationFrame(),因为它可以把代码推迟到下一次重流时执行,而不是立即要求页面重流
  8. 使用虚拟DOM(virtual DOM)库


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK