• 洛一
    置顶
    2021-10-19
    怎么加群

    编辑回复: 你好,加群的链接在课程详情页中有哦,戳链接加入交流群吧

    共 11 条评论
    7
  • 徐洲更
    置顶
    2021-10-19
    光这一篇就觉得值回票价了! 之前都不知道怎么入手前端,看完这段历史才知道了学习方向。 迫不及待后面的内容了

    作者回复: 感谢夸奖,坚持学完肯定更有收获 嘿嘿

    
    66
  • CondorHero
    2021-10-18
    Vue 不需要 React 的 Fiber,因为更新系统中的 Watcher 控制在组件级。

    作者回复: 你好,回答正确,不过原因并不是Watcher的级别,而是虚拟Dom控制在组件级,最早Vue3的提案其实是包含时间切片方案的,最后废弃的主要原因,是时间切片解决的的问题,Vue3基本碰不到 1. Vue3把虚拟Dom控制在组件级别,组件之间使用响应式,这就让Vue3的虚拟Dom不会过于庞大 2. Vue3虚拟Dom的静态标记和自动缓存功能,让静态的节点和属性可以直接绕过Diff逻辑,也大大减少了虚拟Dom的Diff事件 3. 时间切片也会带来额外的系统复杂性 所以引入时间切片对于Vue3来说投入产出比不太理想,在后来的讨论中,Vue3的时间切片方案就被废弃了 希望能帮到你

    共 10 条评论
    191
  • 杨村长
    2021-10-19
    我来回答思考题: vue的diff被限制在组件级,这样每次变化影响的只是一颗子树,相对范围较小。所以fiber带来的收益似乎也会降低,fiber要改架构还可能破坏目前稳定的表现。因此不需要。

    作者回复: 村长威武

    共 4 条评论
    59
  • 天择
    2021-10-18
    请问老师,react的fiber是如何实现的,有浏览器接口吗?怎么知道渲染线程在空闲呢?

    作者回复: 浏览器提供了一个api叫requestIdleCallback, 会在空闲的时候通知你,https://developer.mozilla.org/zh-CN/docs/Web/API/Window/requestIdleCallback 由于这个api兼容性问题,React自己实现了一个

    
    27
  • xzq
    2021-10-26
    看了之后有两个点我和大圣老师的观点有点不一样: 1. 引入虚拟dom的核心并不是为了通过diff得出需要更新的节点从而加快速度(有时候甚至会变慢)。而是给各种类型节点提供了一层向上的抽象, 这种抽象扩展了框架能够完成的功能,和简化了一些操作。在大多数情况下,操作最快的永远是直接操作Dom,这个svelte 好像就是这么做的。 2. Vue2.x 中并不是仅仅只有组件级别的watcher , 每个组件中的响应式数据也有watcher,在对应的deps上。只不过组件内部数据的watcher一般只会通知到组件级别的watcher, 然后由组件级别的watcher通知外部做对应的操作。

    作者回复: 很赞的分享 1. 其实让diff更快和支持跨端这两个都算是虚拟Dom diff带来的有点,到底哪个才是核心的也没必要区分, 而且虚拟Dom精确的来说并不是更快,而是复杂度上去之后性能不崩盘,svelte项目大了之后其实代码体积会变得比较大 2。我想表达的就是只有一个渲染Watcher,如果组件内部配置了watch啥的其实也都会有

    共 5 条评论
    21
  • William
    2021-10-18
    树形结构的diff很难中断,请问有什么依据吗?

    作者回复: 树形结构的Diff用的是递归,递归本身就不太好中断 ,你可以脑补一下 如果两棵树做对比,再一个节点停下来了,你需要记录的是层级,别的节点的状态等

    共 2 条评论
    19
  • Geek_3beb80
    2021-10-21
    由于vue只在组件级别diff,单个组件过于庞大会影响diff效率,过小会增加wacher的数量,改如何取舍呢

    作者回复: 你在设计组件的时候主要考虑功能即可,Vue有点像自动挡,很多优化都帮你做了, 尽量不要拆的太碎,因为虚拟Dom 是做了很多静态优化的,只要按照功能模块拆即可

    
    11
  • 刷子iNG
    2021-10-22
    感觉懂了,但是细想来还是不懂,给自己占坑,希望学完后能解决自己的疑问: 1.vue1 的 watcher 指的是 Object.defineProperty 吗?数据变化之后在 setter 里面去更新对应的dom? 2.当数据变更后,是怎么通知react更新虚拟 dom 的呢?不需要 watcher 吗? 3.为什么vue2引入了虚拟dom就能解决响应式数据过的内存问题呢?vue 中的data不都是响应式的吗?当dom过多 虚拟dom就没有性能问题吗? 4.什么叫组件的变化通过响应式的更新,内部数据的变化通过虚拟dom去更新,不都是数据驱动视图更新,两者的差异是怎么实现的呢? watcher 是什么?

    作者回复: 1. 可以这个理解,不过setter也有一些优化策略 2. react不是直接修改数据,而是使用setState这种函数去操作,可以在函数内部去完成通知 3. 引入虚拟Dom后,一个组件一个Watcher,组件内部虚拟Dom,组件的量级不会大到diff时间超过16。6ms 5. 组件之间的数据更新,是通过响应式去通知,组件内部没有响应式的wathcer,而是通过虚拟Dom更新

    共 2 条评论
    10
  • Mserke
    2021-10-23
    请问 Vue 2 引入虚拟 DOM 给 Vue 带来了跨端的能力,这句话怎么理解呢?

    作者回复: 虚拟Dom带来的能力,就是我们可以使用JSON描述Vue项目,我们可以基于这个JSON,在小程序渲染,在app上渲染,这是Vue1没有的能力

    共 2 条评论
    8