最近简单看了下vue3.0的源码,正好记录一下自己的阅读心得,后续有机会,会写逐行分析的系列
相比于2.0,3.0的runtime不再挂载在vue的原型下,这样做一个比较明显的好处连runtime都可以tree shaking,如果有些api我们没有用到的话,我们的runtime就会大大减少,再加上gzip和cdn,美滋滋啊
好像2.0的paser是基于htmlpaser修改的,3.0的paser写的有点像babel之类的编译器,ast给人的感觉更加语义化,这个当然也有ts的功劳,transform和codegen这两块也借助于更好的ast,可读性跟可维护性感觉更高了,上面提到的runtime shaking,也是在codegen的时候来部分引入api从而达到tree shaking,正如前面说的,没有挂载到原型上
这次在vue 3.0方面的vdom diff,没有采用类似react fiber那样的优化,但是性能也是杠杠的,原因还是有很多地方的,
这个就不用细谈可以吧,大家都知道现在用proxy替代原来的obj.defineProperty来进行监听,虽然里面还有很多小细节,例如对数组以及set、map之类的追踪,不细说是因为这个都烂大街了,但其中对set、map之类的追踪倒是可以看看,毕竟在里面属于单独划分一个collectionhandler去处理
刚才pull了一下代码,发现ssr部分更新了,好像就是对transform方面,处理掉一些node端没有的api、把事件绑定之类去掉等等,可以简单rendertostring,但是还没有达到2.0ssr那么完善,2.0的ssr分析,可以看我之前写的浅谈Vue SSR中的Bundle
3.0还有很多宝藏我还没来得及挖掘,上面只是简单一些总结,肯定有鄙陋,后面或许还有更新,敬请期待~