1、浏览器加载到HTML文档后,会将HTML解析为DOM数,CSS解析为CSSOM树,DOM和CSSOM合并起来就是render树;在修改DOM树、修改样式表或者用户触发事件时会导致render树重新渲染,重新渲染可能会引发重绘和回流,这两个操作都很耗时。
2、在浏览器中,渲染引擎和JS引擎是分离的,渲染引擎会暴露一些接口给JS调用,这里的通信也是要付出代价的;所以尽可能减少对DOM的操作可以达到性能优化的目的。
3、虚拟DOM用JS实现DOM树,减少了对真实DOM的操作次数。此外,setState是异步的,不会每次setState都马上重新渲染,这样进一步减少了可能引发的重绘和回流的次数。