糊里糊涂做了十年前端程序猿,从来不爱深究什么底层,进修什么新技术,只是在工作中,遇到新项目做新项目,遇到需要的新技术现去调研。可是大家都说前端是个技术更新很快的行业,我不知道我现在会的那些皮毛的技术还能在这个AI盛行的年代支撑多久,故而决定开始进行一些前端知识进阶。

总体来说还是个懒惰的人,也不知道从何做起,所以腆着脸向Deepseek发难:“前端十年 会vue2 vue3学过一点 没看过源码不知道如何下手 总感觉技术一点也不厉害 是继续研究基础知识 还是学习高级理论 还是转行 如何提升自己?你可以给我制定一个详细的计划吗?”(由此问题可见我的技术储备真的很低😭)

得到了Deepseek的回答,我决定按照它的计划能学点是点呗,正所谓活到老学到老。

以下为Deepseek给出的计划:

总目标

12周后,你能:

  1. 手写一个迷你版Vue3响应式系统(核心功能)

  2. 清晰画出Vue3首次渲染和更新的流程图

  3. 在公司内做一次15分钟的技术分享(形式不限)

第一阶段:打地基,消除对源码的恐惧(第1-3周)

目标:搞懂核心JS知识 + 看懂Vue最简模型

第1周:设计模式与JS定点突破

  • 周一/二:搞清楚 观察者模式 vs 发布订阅模式
    ✍️ 动手:分别用20行代码实现一个简易 EventBus(发布订阅)和一个依赖收集器(观察者)。

  • 周三/四:搞懂 Object.defineProperty 和 Proxy 的区别。
    ✍️ 动手:实现一个 reactive(obj),让修改属性时打印“更新了”。

  • 周五/六:搞懂位运算基础(| & ~)。
    ✍️ 动手:写个函数判断一个数是不是2的幂次(会用到位运算)。

  • 周日:复习闭包 + 微任务 Promise
    ✍️ 动手:手写一个 nextTick(利用 Promise.resolve().then)。

✅ 第一阶段验收:你的笔记里有3个可运行的代码片段(EventBus、简易reactive、nextTick)

第2周:具象理解Vue工作流程

  • 周一/二:不看源码,先看两篇文章/视频:

    • “Vue3 响应式原理”

    • “虚拟DOM到底快在哪”
      ✍️ 动手:用卡片画出三张图(响应式 -> 虚拟DOM -> DOM更新)

  • 周三~周六:用一个周末下午,跑通官方最小示例。
    ✍️ 把下面代码手动敲出来,理解每一步作用:

    html

    <div id="app">{{ count }}</div>
    <script>
      const { reactive, effect } = Vue // 假装有
      const state = reactive({ count: 0 })
      effect(() => {
        document.getElementById('app').innerHTML = state.count
      })
      setTimeout(() => state.count++, 1000)
    </script>
  • 周日:在笔记里写下“如果让我实现 reactive 和 effect,我会怎么做”(哪怕很幼稚)。

第3周:第一次直面源码(核心入口)

  • 周一/二:克隆 vue-next,用 Octotree 找到 packages/reactivity/src/effect.ts 和 reactive.ts
    不要细读,只做一件事:找到 export function reactive 和 export function effect 的位置

  • 周三/四:跟着一篇带读文章(搜“手撕Vue3响应式”),在源码里加 console.log
    ✍️ 跑通一个最小demo,在控制台看到 log 顺序。

  • 周五/六:画出你理解的 track → effect → trigger 调用链。

  • 周日:休息 & 复盘。把第一阶段的3个小demo合并成一个 my-reactivity.js 文件。

✅ 第二阶段验收:你能对新人说出“响应式就是通过 Proxy 拦截 get 收集依赖,set 触发依赖”

第二阶段:真正啃下响应式核心(第4-6周)

目标:手写迷你 Vue3 响应式系统

第4周:手写 reactive 和 effect(跟着代码走)

  • 周一~周四:每天写30分钟。
    ✍️ 目标输出 myVue3/reactivity.js,实现:

    • reactive (基于 Proxy)

    • effect (立即执行并记录依赖)

    • track / trigger

  • 周五/六:让你的代码跑通这个测试:

    js

    const obj = reactive({ a: 1 })
    effect(() => console.log(obj.a)) // 应打印 1
    obj.a = 2                     // 应打印 2
  • 周日:对比官方源码,找差异(比如依赖存储用的 Map/Set 结构)。

第5周:解决分支切换与嵌套 effect

  • 周一~周三:发现你的简单实现有bug:

    js

    effect(() => {
      console.log(flag ? obj.a : obj.b)
    })
    // 当 flag 变化时,依赖不会自动更新

    ✍️ 修改代码,实现 cleanup 逻辑。

  • 周四/五:支持嵌套 effect(effect 里调用 effect)。
    查资料看如何用 effectStack 解决。

  • 周六/日:手写实现 ref 和 computed(基于你已有的 effect)。

第6周:追一个完整流程(从 new Vue 到页面渲染)

  • 周一/三:转而阅读 runtime-core/src/renderer.ts 中的 patch 和 mountElement
    ✍️ 只关注“初次渲染”路径,画出树形调用图。

  • 周四/六:回答这个问题:
    <div>{{ count }}</div> 中的 count 是如何触发重新渲染的?”
    结合你写的响应式系统,串起来。

  • 周日:写一篇笔记《我理解的 Vue3 渲染流程:从响应式到真实DOM》。

✅ 第二阶段验收:你的 my-reactivity.js 超过150行且能跑通复杂例子(嵌套、分支切换)

第三阶段:建立“我能读源码”的自信(第7-9周)

目标:独立解决一个实际疑惑

第7周:攻克一个你最常用的指令

  • 周一/二:选题:v-if / v-show / v-for 三选一。

  • 周三/五:在源码中搜索该指令的处理位置(通常在 compile-core 或 runtime-dom)。
    思路:找到 transform 函数。

  • 周六/日:总结该指令的“编译时 + 运行时”行为。
    ✍️ 输出一张对比表:v-if 和 v-show 在源码层面的本质区别。

第8周:搞懂一个性能优化点

  • 选题:Vue3 为什么比 Vue2 快?
    锁定具体点:PatchFlag(静态标记)或 Block tree

  • 每天动作

    • 在 packages/compiler-core 里搜索 PatchFlag

    • 看它是在哪里被赋值的。

    • 在 runtime-core 里看 patchFlag 如何被使用。

  • 周末输出:一页PPT《一个 PatchFlag 如何让 diff 算法跳过静态节点》。

第9周:整理一篇可分享的稿子

  • 周一/三:选择你最透彻的一个模块(建议响应式或首次渲染流程)。
    写一篇1500字以内的文章,要求必须有自己画的图(手绘拍照也行)。

  • 周四/六:在公司找1-2个同事,讲给他们听(15分钟内)。
    重点不是讲多深,而是 能停下来回答一个问题

  • 周日:根据反馈修改文章,发到掘金/知乎/内部wiki。

✅ 第三阶段验收:你完成了一次15分钟的技术分享(可以是录屏,不用完美)

第四阶段:从“读”到“创造”(第10-12周)

目标:输出一个解决业务痛点的demo

第10周:找一个真实业务痛点

  • 回顾你的项目:找到一处“数据很大,交互卡顿”或者“动态组件很慢”的地方。

  • 用你学到的

    • 如果数据大,尝试用 shallowReactive 或 markRaw(你已理解原理)。

    • 如果频繁重新渲染,用 shouldComponentUpdate 类比或 v-once

  • 做对比:改造前后录屏对比,记录时间差异。

第11周:造一个轮子(迷你Vue Router 或 迷你Pinia)

  • 选题:用你掌握的响应式 + 路由原理,实现一个几十行的 createRouter
    ✍️ 支持 push 和监听 hashchange,更新当前组件。

  • 目的:不是为了实用,是为了证明“任何Vue生态库,底层也不过是响应式 + 事件”。

第12周:全面复盘,建立长效习惯

  • 整理你的12周产出

    • 代码:my-reactivity.js + 迷你轮子

    • 文章/PPT 至少2份

    • 流程图 3张以上

  • 定下后续节奏

    • 每月只读透一个模块(比如下一个目标 Scheduler 或 KeepAlive)。

    • 遇到业务问题先去源码搜关键词,养成习惯。

✅ 最终验收:你明确知道自己“已经比过去十年任何一天都更理解Vue”,并且有公开产出物可以证明。

以上,不知道能坚持到哪一步,总得来说,学一点就比不学强,gogogo!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐