react里面有virtual DOM这个概念嘛
他和原生操作DOM的区别就是用JS生成一个类似中介的虚拟dom
这个是用JS实现的DOM,他里面有记录了变化前后的一些记录,然后在重新渲染的时候,进行有区别部分的局部渲染。这样就可以避免整个页面的渲染?那原生操作DOM就是整个页面渲染?我看很多网上的例子都是说什么原生每次变化都是直接重置innerHTML,这样操作如果大量数据的话就会GG,哈?virtual dom是记录变化,然后利用他的diff算法进行优化,最后在有变化的地方进行局部渲染,那么我用原生不能实现同样的效果?我不能也通过对比找出变化然后利用diff算法在指定位置进行innerHTML修改?这样效率会比virtual dom差?求解
是这样的:
首先, 虚拟dom并没有比直接原生操作更快, 所谓"快"是有条件的
比如点赞, 数字+1, 直接操作dom会更快.
如果你能自己捋请规则, 每回手动操作dom的时候, 都只改动应该改变的, 那dom操作永远比虚拟dom快.
但如果你的改动勾连的地方很多, 而且要保持状态, 那虚拟dom的自动diff无疑会让你省更多心.
比如一个列表, 列表项有点赞等状态, 回复数量等信息, 有动态新增, 有动态加载, 这时候你要直接操作dom会很繁琐.
虚拟dom的核心在于diff, 它自动帮你计算那些应该调整, 然后只修改该修改的区域, 省下的不是运行速度这种小速度, 而是开发速度/维护速度/逻辑简练程度等"总体速度"
当然, 虚拟dom也有槽点, 这里就不展开了