编辑回复: 你好,加群的链接在课程详情页中有哦,戳链接加入交流群吧
作者回复: 感谢夸奖,坚持学完肯定更有收获 嘿嘿
作者回复: 你好,回答正确,不过原因并不是Watcher的级别,而是虚拟Dom控制在组件级,最早Vue3的提案其实是包含时间切片方案的,最后废弃的主要原因,是时间切片解决的的问题,Vue3基本碰不到 1. Vue3把虚拟Dom控制在组件级别,组件之间使用响应式,这就让Vue3的虚拟Dom不会过于庞大 2. Vue3虚拟Dom的静态标记和自动缓存功能,让静态的节点和属性可以直接绕过Diff逻辑,也大大减少了虚拟Dom的Diff事件 3. 时间切片也会带来额外的系统复杂性 所以引入时间切片对于Vue3来说投入产出比不太理想,在后来的讨论中,Vue3的时间切片方案就被废弃了 希望能帮到你
作者回复: 村长威武
作者回复: 浏览器提供了一个api叫requestIdleCallback, 会在空闲的时候通知你,https://developer.mozilla.org/zh-CN/docs/Web/API/Window/requestIdleCallback 由于这个api兼容性问题,React自己实现了一个
作者回复: 很赞的分享 1. 其实让diff更快和支持跨端这两个都算是虚拟Dom diff带来的有点,到底哪个才是核心的也没必要区分, 而且虚拟Dom精确的来说并不是更快,而是复杂度上去之后性能不崩盘,svelte项目大了之后其实代码体积会变得比较大 2。我想表达的就是只有一个渲染Watcher,如果组件内部配置了watch啥的其实也都会有
作者回复: 树形结构的Diff用的是递归,递归本身就不太好中断 ,你可以脑补一下 如果两棵树做对比,再一个节点停下来了,你需要记录的是层级,别的节点的状态等
作者回复: 你在设计组件的时候主要考虑功能即可,Vue有点像自动挡,很多优化都帮你做了, 尽量不要拆的太碎,因为虚拟Dom 是做了很多静态优化的,只要按照功能模块拆即可
作者回复: 1. 可以这个理解,不过setter也有一些优化策略 2. react不是直接修改数据,而是使用setState这种函数去操作,可以在函数内部去完成通知 3. 引入虚拟Dom后,一个组件一个Watcher,组件内部虚拟Dom,组件的量级不会大到diff时间超过16。6ms 5. 组件之间的数据更新,是通过响应式去通知,组件内部没有响应式的wathcer,而是通过虚拟Dom更新
作者回复: 虚拟Dom带来的能力,就是我们可以使用JSON描述Vue项目,我们可以基于这个JSON,在小程序渲染,在app上渲染,这是Vue1没有的能力