虚拟DOM要解决的问题:能够让我们不用付出太多的努力,还能够保证应用程序的性能下限,让应用程序的性能不至于太差,甚至想办法逼近命令式代码的性能。
虚拟DOM创建页面的过程分为两步:第一步是创建JavaScript对象,这个对昂可以理解为真实DOM的描述;第二步是递归地遍历虚拟DOM树并创建真实DOM。
虚拟DOM与innerHTML的性能比较
在更新页面的时候,innerHTML的过程是重新构建HTML字符串,再重新设置DOM元素的innerHTML属性。重新设置innerHTML属性就等价于销毁所有旧的DOM元素,再全量创建新的DOM元素。
虚拟DOM更新页面需要重新创建JavaScript对象(虚拟DOM树),然后比较新旧虚拟DOM,找到变化的元素并更新它。
在更新页面时,虚拟DOM在JavaScript层面的运算要比创建页面时多出一个Diff的性能优化,不过这是JS层面的运算,不会产生数量级的差异。再观察DOM层面的运算,可以发现虚拟DOM在更新页面时只会更新必要的元素,但innerHTML需要全量更新。