shalldie / blog-comments-store

博客的评论仓库。
MIT License
0 stars 0 forks source link

Virtual DOM 的设计与实现 - #10

Open shalldie opened 4 years ago

shalldie commented 4 years ago

this issue is made by: https://github.com/shalldie/vue-git-comment

zheNeng commented 3 years ago

diff优化神评,面试进阶题目就是这个。

xluo62 commented 3 years ago

请问为什么要删除old dom上的节点? 每次更新不应该是有一棵新的VDOM树吗?之后更新到real dom的时候直接用新的VDOM就好了吧? 不太理解为什么要删除old dom上的节点

shalldie commented 3 years ago

@xluo62 请问为什么要删除old dom上的节点? 每次更新不应该是有一棵新的VDOM树吗?之后更新到real dom的时候直接用新的VDOM就好了吧? 不太理解为什么要删除old dom上的节点

你是指的 diff 中的 removeVnodes 这部分吗? diff 的目的是为了复用节点,如果直接全量应用新 vdom 就失去了复用目的。

本质是,oldVDom 如果想更新为 newVDom,需要怎么对自身dom进行改造,而不是根据 newVDom 去生成dom。

因此,如果 newVDomoldVDom 少一个节点,那么 oldVDom应该删除一个 real dom 去适配到 newVDom

saqianwenwang commented 3 years ago

看了 mini-mvvm 的 compile 部分,貌似直接用dom来解析的?

这样简单是简单,如果想在服务端跑是不是只能换正则?

shalldie commented 3 years ago

@saqianwenwang 看了 mini-mvvm 的 compile 部分,貌似直接用dom来解析的?

这样简单是简单,如果想在服务端跑是不是只能换正则?

node 端也可以模拟浏览器环境,比如 jsdom 迁移成本很小,不过性能应该比正则差一些