虚拟DOM与diff算法(主要理解)

回流&重绘

在这里插入图片描述
layout布局 attachment结合 painting绘制 display展示
回流:重新布局 (每个页面至少1次)

添加或删除可见的DOM元素 
元素的位置发生变化 
元素的尺寸发生变化(包括外边距、内边框、边框大小、高度和宽度等) 
内容发生变化,比如文本变化或图片被另一个不同尺寸的图片所替代。 
页面一开始渲染的时候(这肯定避免不了) 
浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的)
width 
height
padding
margin
display
border-width
border
min-height

top
bottom
left
right
position
float
clear

text-align
overflow-y
font-weight
overflow
font-family
line-height
vertival-align
white-space
font-size

重绘:重新布局影响元素外观、风格、不影响布局

color
border-style
border-radius
visibility
text-decoration
background
background-image
background-position
background-repeat
background-size
outline-color
outline
outline-style
outline-width
box-shadow

优化方案

一个个设置样式,统一设置class 
批量修改DOM1-隐藏修改,2-虚拟DOM等 
避免触发同步布局事件 
	1. qsa.li
	2. forEach     this.style.width = 
对于复杂动画效果,使用绝对定位让其脱离文档流
等

虚拟DOM(Virtual DOM)

真实DOM:HTML页面中任意一个标签或者是文本都是
虚拟DOM:就是使用javascript的对象来描述了DOM结构

在这里插入图片描述

思考:为什么要有虚拟DOM?
回答:性能(导致原因回流&重绘)

Virtual DOM Diff算法

在这里插入图片描述
在这里插入图片描述

算法规则

1 步骤一:用JS对象模拟DOM树
2 步骤二:比较两棵虚拟DOM树的差异
3 步骤三:把差异应用到真正的DOM树上

虚拟DOM介绍
如何实现一个Virtual DOM 算法:https://github.com/livoras/blog/issues/13
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
##小总结

什么是虚拟DOM:就是使用javascript的对象来描述了DOM结构

为什么要虚拟DOM:提升性能(因为回流、重绘 浏览器工作机制)

如果更新DOM数据:通过diff算法(同层比较)

1 步骤一:用JS对象模拟DOM2 步骤二:比较两棵虚拟DOM树的差异
3 步骤三:把差异应用到真正的DOM树上

切记:当遍历数据的时候要写key 提升性能

发布了15 篇原创文章 · 获赞 3 · 访问量 662

猜你喜欢

转载自blog.csdn.net/qq_42714690/article/details/103678071
今日推荐