赞
踩
“哥,我面试字节挂了!”
小明哭丧着脸:“MD,太卷了!这 Vue3 刚转正没多久,面试官就问上我原理了,什么 reactivity 实现原理,proxy ,Vue3初始化的流程,编译优化,diff 算法的实现……直接一面就挂了!”
“面试问原理正常呀, 虽然 Vue3 刚转正,但已经发版很久了呀,你不会没关注吧? ”
小明抓了抓头发:“关注是关注了, 但源码看不懂呀 ,那一个 renderer.ts 文件就 2000 多行代码,这怎么看呀?”。
“源码是难,但如果你想面大厂拿高工资,源码是绕不过的呀。面试官通过问你源码,一下子就能知道你是不是一个爱学习爱钻研的同学,还有呀,那 Vue3 项目那么大,处理的工程问题也要比我们平时做的项目复杂不知多少倍了,看看人家解决问题的思路和方式,也是非常受益的。“
“哥,源码重要性我知道,关键是看不懂……你那有没有好的 Vue3 源码学习资料呀 ,赶紧给老弟推荐推荐~”
“你别说,还真让你赶上了,最近 github 上有一个库叫做 mini-vue , 用它来学习 Vue3 源码可以把难度降到最低。
“mini-vue 这个库主要特点是把 Vue3 源码中最核心的逻辑剥离出来,只留下核心逻辑,而且带有详细的中文注释以及完善的输出,可以帮助你快速理解框架核心运行流程。”
注释说明了逻辑处理的 case 是什么,非常清晰
图片截取自mini-vue
“哇塞,还有中文注释呢,真是太贴心了,毕竟我这英文确实不咋地哈哈!”
“你再跑一下库的 example 看看, 就那个 helloworld ,然后看看控制台的输出。“
"这些输出是什么?等等, 难道说是程序执行的流程节点?"
“没错,就是程序执行的流程, 基于这个输出日志,你就能知道实例化一个组件的流程是什么了, 有助于你理解整个框架的执行流程, 先建立一个整体认知。”
“而且你看看输出的右侧,你可以直接点击跳转到对应的代码上,然后就可以开开心心打上断点,好好琢磨这代码的实现了。”
“真是绝了, 怪不得这个库现在已经拿到 4.4k 的 star 了”
“还不只如此呢,再给你看个绝活,mini-vue 库里面的代码实现是和 Vue3 源码里面的实现保持高度一致的,比如说函数的命名吧,你看这个 diff 算法函数是 patchKeyedChildren 吧”
当你看完简单版的实现后,想看看源码里面是如何实现的, 你只需要复制这个函数名,然后跑到 Vue3 里面搜索一下就可以了。
“我草,这个绝了,我看完简单版本之后,再去看源码的话,难度就降低很多了呀!”
“哈哈哈,是的,这个其实也符合学习模型,如果你一上来就看特别复杂的,对你来讲就到了学习的恐慌区了,很多同学就是被吓的,一看代码量那么大,逻辑那么复杂,直接就放弃了。而学习 mini-vue 这个库就是简单模式,我再跟你说说 mini-vue 是基于什么思想做出来的吧 你以后也可以按照它的方式来实现你自己的 mini-react、mini-webpack、mini-rollup 。”
“真的是迫不及待了,哥你赶快坐下,我这就给你买罐红牛去,好好给我上一课~哈哈”
我喝了一口刚刚从冰箱拿出来的冰镇红牛,翘着二郎腿缓缓说道:“看你今天这么好学的份上,我再给你唠叨几句。像 Vue3 这么大的工程项目,它会做很多事,比如给开发环境下的用户良好的错误提示↓”
“你看这个,这里是在处理 HMR (热更新)↓”
“而这些逻辑在你刚刚看源码的时候是不需要关心的,但是这部分的逻辑对于你这个新手来讲非常不好区分,我给你画个图你感受感受”
“哈哈哈,哥你可真是灵魂画手呀,这尼玛画的这么抽象,不过我看明白了。你是指红色的方块是核心逻辑,而紫色的圆圈都是非核心的吧,比如错误提示和HMR”
“哈哈哈,看来我的画功还是不错的,你一下就明白了,就是这个道理。而我们学习源码的时候第一步就是先摸清这个核心逻辑,这个也称之为 happy path, 相当于一棵大树的树干。把这个拿下后,后面我们就可以自己看了,代码逻辑里面无非就是处理各种各样的 edge case(边缘情况)。你有没有发现,其实这是对 Vue3 框架做了功能上的拆分。”
“我擦,又学到了,我已经感受到了,把 Vue3 整体拆分变小,然后这样难度就直线下降了,而我们再把 happy path 理解透彻,这一步学完之后再去理解那些 HMR 或者错误提示的逻辑,也会变得更简单。”
“对的,这个就是任务拆分的思想,你可以横着切,也可以纵着切,想怎么切就怎么切,如果从算法思想的角度来讲的话就是……”
“就是分而治之的思想!” 小明赶紧把他知道的名词抢先回答出来,生怕别人不知道他学过算法。
“哎呀,可以呀小明,看来你算法学得不错嘛。所以这个 mini-vue 库对于想学习源码的同学来讲非常有意义,现在作者已经完成了三大模块的编写了。”
“噢?三大模块是啥?我这还真不知道”
“三大模块是指 reactivity(响应式模块)、runtime-core(运行时模块)、compiler(编译模块), Vue3 的核心就是这三大模块。现在 Vue3 的源码是采用 monorepo 的形式, 分了好多模块,不过对于你这初学者来讲,研究透三大模块就够你面试用了”
"哦了哦了,我这就去把 mini-vue clone 下来好好学习学习,回头面试的时候争取搞定面试官!哥,那我学习 mini-vue 遇见问题的话可还得麻烦你呀,哈哈哈~"
“你可以直接加 mini-vue 作者的微信,我们都叫他大崔哥。有问题直接问他就好了嘛 ,我有问题也是直接问他, 关于 mini-vue 上的问题他会回答你的,放心好了”
↑扫码添加 mini-vue 作者 大崔哥 微信↑
"我这就赶紧加上大崔哥哈哈哈~开心"
"我再给你说件更开心的事。头几个月前,大崔哥基于他这个库出了一套视频课程,会带着你一行一行写代码,最后带你实现一个你自己的 mini-vue,那可真是nb大了。因为学习编程其实主要是学习解决问题背后的思考过程。"
"我透个底,我能这么清楚 mini-vue 库,就是因为我跟着他的视频课程全部敲了一遍,给你看看我自己实现的 mini-vue ,这在面试的时候能给我加不少分呢。"
"哎呀,哥,你不厚道呀,有这么好的学习资料怎么不早和小弟我分享分享呀,吃独食呀你这是,赶紧给我介绍介绍"
"他这个课还真挺超出我预期的,你平时看到过写单元测试的项目吗?没有吧,更别提在讲课的时候用单元测试,大崔哥在讲课的时候会先写一个单元测试,然后再去写功能的实现,这还没有完,最后一步用重构手法来让代码变得可读性非常高"
"什么什么?这名词有点多呀,又是单元测试又是重构手法的,等等,如果我没记错的话,这应该叫做 TDD 吧?"
"小明这名词你懂得还真不少呢哈哈~就是 TDD ,我也是看完这个课才了解到的,他先写一个测试,就是为了告诉大家目标是什么, 然后写代码实现这一步也特别有讲究, 比如会使用 TPP 来做小步骤的拆分,先实现一个具体的逻辑,然后慢慢重构成通用的逻辑,让你看到逻辑逐渐成形的整个思考过程,最后一步再用重构手法,这个就是我之前推荐你看的《重构》这本书里面的技巧,大崔哥都融入在课程里了。"
"这个就是你说的编程学习就是学习解决问题背后的思考过程吧? 那可真是太妙了, 我之前也买过一些课, 那些老师讲课时候直接把代码就敲到完美了,我还纳闷怎么老师都那么厉害,不需要思考的吗 ?"
"哈哈,是的,其实你看的那些课程老师的代码直接敲到完美,都是因为备课了。但是他们省略了最关键的,就是思考如何把代码变完美的这个过程, 大崔哥出的这个视频课倒是满足了我。"
"刚刚说的都是课程里面涉及的编程思想,除了这个,大崔哥还是一位 vim 党, 那敲代码的速度行如流水,看他敲代码真的是非常爽,这不我这几天也开始准备学习 vim 了嘛。" 我拿出了刚买的 hhkb,敲了敲空格键。
"哇塞,听你说的我都心动了,那他这个课程讲了多少 mini-vue 库里面的内容呀?"
"全部!可以实现一个同 mini-vue 一个级别库,三大模块全部都有,目前已经更新到 compiler 模块了,你自己瞅瞅"
上滑下方图片查看完整大纲
如果你想详细了解课程
扫码添加大崔哥微信
知无不言,言无不尽
▼
“还有大崔哥在讲双端 diff 算法的时候用了得有 15 个单元测试 case 来一点点驱动出逻辑实现,让我知其然也知其所以然。其实他用的还是拆分的思想,把大的任务拆分成小任务然后逐一击破,听起来非常爽!”
“当然了,用大崔哥的话就是‘只有手写一遍,才能真正的掌握源码’,这个观点我是非常认同的,如果你光看书的话,那只是走马观花而已,不自己思考一遍的话那你过几天就都忘了。并且一些细节自己实现出来也是非常有成就感的。”
"哈哈,我也想自己实现一遍,但是哥你说我这水平比较差的同学能不能实现出来呀?这个我比较担心呢!"
"这个你放心吧,大崔哥在课程里面一行代码都没有跳过,而且基于课程还整了一个 repo ,一节课对应一个 github commit ,你听完课如果想看看代码的话,找到对应的 git commit 就可以了,非常贴心。"
"哇塞,这个有点极客呀,是我喜欢的风格"
"哈哈,还有更极客的,大崔哥还把 github discussions 作为课程内容的沉淀,我们把自己实现的 mini-vue 库和平时基于课程总结的资料全部都写在这里,还有平时一些常见的问题也整理到这里了,大崔哥的理念就是用做开源的方式来做课程。"
"用做开源的方式做课程,这个理念好棒呀,能看出大崔哥特别喜欢开源,技术倒是没问题了,不过他讲课水平怎么样?我之前买的某个平台的课程,内容是不错,不过讲师的讲课水平真的是……"
"这个你放心吧,大崔哥讲课特别有条理性,而且一点都不拖泥带水。他不仅技术强,而且之前在培训机构做了2年专业讲师,还服务过字节的青训营,现在是做自由职业独立讲师了,他的课程就是他的产品,不管是群里面的答疑还是对课程质量的把控上,要比我知道的培训机构都要负责的多。毕竟独立讲师没有雄厚的资金去打广告,主要是做产品口碑,名声砸了谁还会买他的课呢。"
"这是大崔哥的 b站,你可以先去听听他讲课的风格,跟你讲,全是干货,质量都要比一些付费的课程来的高, 上周我给大家分享的 webpack 实现原理就是我从他这偷学来的哈哈。 "
(大崔哥B站ID : 阿崔cxr,超多前端干货视频等你来看)
"还有呀,学员群里面的学习气氛特别好,大家一起抱团学习,你问问题的时候其他学员也都会帮你出主意。大崔哥也是全程在群里答疑,课后服务我是相当的满意了"
"那我就放心了,是心动的感觉!我要冲了!!! 等等哥,这课那么有特色,会不会很贵呀,小弟我这钱包还是有点瘪的……"
"放心好了,这课程才几百块钱,在我看来可以学到那么多编程思想和 Vue3 源码级别的知识,是非常非常值的,群里已经有同学靠自己实现的 mini-vue 拿到阿里 offer 了。你想想几百块钱的课,换大厂的 offer ,你说这几百块钱贵不贵?投资自己的大脑永远都不会吃亏的。"
"大崔哥还把试听课放到了 B 站上,你可以先去听一听,有意思的是他一口气放了前5集视频,对课程内容是相当的自信呀"
扫码添加大崔哥
获取前5节试听课链接
▼
"是,投资自己的大脑永远都不会吃亏!!!平时花钱充游戏买衣服的时候一点都不心疼, 我现在买知识心疼个什么劲,更别说这东西学好了还可以涨工资,哈哈哈,哥,我悟了~ 我这就和大崔哥要试听课链接的"
"这就对了,年轻人就该有此觉悟嘛, 学到本事去哪里都不怕。"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。