背景
其实我很早之前就想写一篇关于vue3
的源码分析,鉴于之前上班很忙,加上上班使用的技术栈是react
,vue3
的源码只看过很少的一部分,主要的经历还是放在了react
和相关的技术上。
我于2023年7月末从字节离职,现在闲居在家,终于有时间写自己想了很久的文章了。
选择vue3
的原因有很多。第一个就是vue3
的源码很简洁明了。相对于react
的源码来讲,vue3
的源码很少,而且思路十分清晰流畅。一个简单的例子就是batchUpdate
,vue3
的实现是直接都丢到一个异步队列里面进行渲染,在react18
以前,react
的batchUpdate
是由react
自己在事件回调里面进行实现的。另外,vue3
并没有像react18
那种concurrent
那样抽象的东西。
我于2020年的时候看了深入浅出vue.js
这本书,当时我还在学校念书,对于源码的理解很差,书里面很多东西都没看懂。这本书讲的是vue2
的源码分析,现在看起来写的确实很不错。当时vue3
还是beta
版本。写这篇文章的时候是2023年的8月,时间过了三年,我也看过不少的源码包括react
等东西,调试技巧也比以前好了很多,有了自己的理解。
无论是vue
还是react
渲染的算法都是使用深度优先遍历
,在遍历到的时候做一些事在回溯的时候做一些事。本文档也会按照此思路去构建,自顶向下的构建。从createApp
一直到逻辑最低端的ref
等api。
最后更新于