声明:本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!
vue
作为当之无愧的前端流量之王,大家都在讨论,钻研,学习,膜拜。当然,我也是一个,
然而当我如痴如醉的把玩vue的时候,却发现我陷入了一个误区。
我始终没有真正的明白,我们为什么要学习他?
我叹服他的技术,钻研他的原理,整理他的源码, 理解他的思想,
然后某个五百人的wx群,三百人的qq群,或者求职者云集的面试的现场,抛出,诸如 diff算法
、依赖收集
、编译原理
这种高深莫测的技术话题和技术见解
霎时间只见众人顶礼膜拜, 偷来花痴的一瞥,左一句大佬,右一句大佬,听的我心花怒放
,日见嚣张
。
我总以为作为技术人,技术就应该是一切,我要变强,变得能看懂所有源码。 要以装逼秀肌肉
为己任。
别人写的代码乱,我抨击他太low
,别人代码写的太长,我教训他太菜,别人代码用了react
,我蔑视的说那是个垃圾(其实是我不懂)
我好为人师,我倚老卖老,我自以为是,或没事找事
我每天都在各种可以发挥我独到见解的地方炫技
。仿佛有着众人皆醉我独醒的即视感。
就这样,装了几年,工资没涨,行情没好,在鲜花和掌声背后的我,也自然而然的没成为所谓的大佬
因为我发现,所谓的技术炫技
,在业务面前狗屁不是!
我相信你一定经历过,在一个夜深人静的夜晚,看着被改了无数遍的业务屎山代码
,心中涌出了一个大胆的想法: md,有一个能跑就行(要不我跑,要不代码跑)
。
在我们大多数的工作中,这才是我们面对的现实,赤裸裸的现实!
至于什么diff算法
,最长递归子序列
, 你爱啥序列啥序列,能给我快速解决问题,他就是好序列!
然后用十个if esle
外加三个for循环
粗暴的解决问题
纪伯伦说过,我们已经走的太远,以至于我们忘记了为什么而出发
是的,我们仿佛真的忘记了,当初为什么要学习vue
。
是啊,为什么要学vue
? 这是一个多么朴实的问题。
有人说,是单位项目需要, 有人说是面试要考,还有人说是,火爆的框架就要学
其实,要解答这个为什么? 我想要我的职业经历说起
想起刚入行的时候,从原生js 学起
然后jqery
崛起,开始jqery
一把梭哈,然后发现 angular
、react
崛起
接着,vue
杀出一条血路,受各个小厂的喜爱
,angular
由于彻底升级,拉伤大腿,也彻底的在中国失去市场。
这一路走来,脑海中的一幕幕浮现在眼前,恍如隔世,又恍如隔日!
入行七八年了,vue
也陪伴我五六年了
vue
为什么能迅速火爆大江南北,为什么能够从一个小小的框架成为一个行业的标准之一
原因很简单, 又快又好的解决问题
当别人还在考虑怎么设计项目架构的时候,我靠着vue提供的脚手架,已经完成了项目搭建
当别人还在抽象代码的时候,我已经靠着vue 的组件系统
,完成了多页面开发
当别人还在半夜猛敲键盘改bug
的时候, 我靠着vue的能力早已经改完bug
躺在床上刷着抖音
所以,好用
才是我们选择vue的本质原因,毕竟,懒
是人类的本性,能又快又好又省事的搞定开发任务,何乐而不为呢?
而炫技
,只是他的一个附加属性,我们要很清楚的确定一个目标,理解原理,是为了让我们排查问题,解决问题,而不是炫技
,如此而已!
此时此刻,我们需要明白的是,我们对于框架的学习,要以实用为主
,提升自己的方向当然也要以学以致用为主
在正式的开始讲实用的vue
之前,我还有的两个疑问,与各位仁兄讨论!
vue
和react
之争,已经持续了很多年,并且还会持续很多年,因为有人的地方就会有江湖
, 码农的江湖虽然没有人会永远年轻,但总会有人年轻。
于是该骂街的还要继续骂,该吵架的还要继续吵,该站队的还要继续站
几年来,争论不休,并且正反方的最佳辩手也是总是能引经据典,在最刁钻的地方,找个最刁钻的角度,给出致命一击
虽然 头几年我也是骂街大军中的一员,但是自从颈椎出问题
以后就不这个那个都研究了
而到了今天大家争论哪个框架更好,我已经开始叩谢祖师爷赏饭吃了
我偷偷总结了,正方(支持vue) 反方(支持react) 最佳辩手,的辩论稿
先阐述vue
的伟大之处,旁征博引,甚至更有甚者,搬出vue祖师爷
的经典名句react就是性能差点
vue优点如下:
这几点也是vue
的核心竞争力,特别是第一点(我总是感谢祖师爷赏饭吃),当然,这些反方是不会说的,
他们会说的是,ts支持一坨屎
,写法固定且呆板
, api设计难用,等等。。。
react 就不用说了,一个跨时代的UI开发新思路,不需要迎合用户,写法足够炫酷,灵活,随心所欲,总之VUE垃圾
react 优点如下:
1、友好拥抱ts 2、灵活开放的开发体验,随心所欲写代码 3、纯函数的编程范式,够先进,b格够高
当然,到了正方的嘴里,就开始抨击他, 性能不好,jsx难用 云云。。。
好了,正方反方总结完了,下面我说结论:
虽然听着都很有道理,但都是吃饱了撑的
之所以大家不断的争论,不断的吵架,骂街,主要就是为了证明一个事情,我比你牛逼!!!
但牛逼这个事情,哪有个准? 所谓三十年河东三十年河西,今天你牛逼
,明天就有可能菜逼
所以,最后又回到我们之前的论点上来,我们使用这些技术的初衷又是什么?
又快又好的解决问题
对,围绕着这个初衷,单位用什么你就用什么? 单位的基础设施是哪个方向的,你就干哪个方向的,当你在一个方向上有所建树的时候, 什么框架牛逼,都不如你牛逼
好使
有jy
又问了,如果单位没规定用啥呢?
那你想用什么就用什么, 不过,那个?我想问下这种可以自己技术选型不受束缚的神仙公司还招人吗?
接下来我们探讨下第二个问题,能看懂VUE源码 真的就高人一等吗?
这个问题一直困扰了我很久,因为在业界的共同认知中,能看懂源码的人,一定是个很强的人,
但是,我平时在业务开发的过程中,不能说是跟源码没什么关系,简直可以说毫不相干
那么阅读源码真的可以变成个很厉害的人吗?
于是几年前,我抱着变成一个强人的态度,试着硬着头皮读了读vue的源码?
在我之前的认知中,阅读源码是个很高深的能力,他需要你有很高的知识储备, 以及有着缜密的思维能力,要能够理解作者的想法,体会作者的用意,甚至要跟他产生共鸣!
我这种整天crud
的混子能看懂吗?
随着几天的深入的研究,我发现我竟然看懂了。
原因很简单,他就跟学习一样,只要你硬着头皮看,就能看懂,不懂的地方,就百度。
我恍然大悟,原来所谓的源码,也不是离我那么遥远!
我甚至还做了笔记和总结github如下:vue-next-analysis
然而三年过去了,我变成大佬了吗?
并没有,别说大佬了,老大都没当上过,入行七八年,依然是一线的小兵!
这究竟是为什么呢?
我苦思冥想,业界不是公认能看懂源码 就一定很强吗?我怎么好像感觉屁用没有
就在前几天,就一个同事问了我一个问题
nextTick和onUpdated,究竟谁先执行?
我竟然回答不出来一个字,我明明看过源码啊,我通读了啊,当时明明研究过这个问题啊,还深入探究过执行过程啊,怎么就回答不出来呢?
原因很简单,我用不上,就会忘!
我恍然大悟,原来,所谓的能看懂源码,只是能看懂,并不是能运用,即使理解了,随着时间的推移,也有可能忘记。
所以,能看懂源码,只是你有毅力,而并不是你有能力
这是我多年陷入的误区,我相信这也是很多人的误区
能看懂源码并没有什么卵用,有用的是你能从源码中收获什么?
于是我重新翻出了 vue
的源码
我发现我之前只顾着炫技
追求高大上的东西 反而遗漏了很多实用且不起眼的气细节
我才明白,当年高人一等的优越感,是多么的荒诞可笑
学以致用 这四个字,真的是需要自己仔细的琢磨和体会!
例如:
vue中有着完整的且经过验证的工具函数,根本不需要我们百度
// 是不是数组
export const isArray = Array.isArray
// 是不是map
export const isMap = (val: unknown): val is Map<any, any> =>
toTypeString(val) === '[object Map]'
// 是不是set
export const isSet = (val: unknown): val is Set<any> =>
toTypeString(val) === '[object Set]'
// 是不是日期
export const isDate = (val: unknown): val is Date =>
toTypeString(val) === '[object Date]'
// 是不是正则
export const isRegExp = (val: unknown): val is RegExp =>
toTypeString(val) === '[object RegExp]'
// 是不是函数
export const isFunction = (val: unknown): val is Function =>
typeof val === 'function'
// 是不是字符串
export const isString = (val: unknown): val is string => typeof val === 'string'
// 是不是symbol
export const isSymbol = (val: unknown): val is symbol => typeof val === 'symbol'
// 是不是对象
export const isObject = (val: unknown): val is Record<any, any> =>
val !== null && typeof val === 'object'
// 是不是promise
export const isPromise = <T = any>(val: unknown): val is Promise<T> => {
return (
(isObject(val) || isFunction(val)) &&
isFunction((val as any).then) &&
isFunction((val as any).catch)
)
}
再比如: vue源码中
提供了完整的monmrepo
构建方式, 也值得我们研究和借鉴,而不是去关注代码本身
还比如:
vue源码中
提供了pnpm 这种先进的包管理方式,让你再也不用为了下不了node-sass
耽误开发进度,而口吐芬芳
所以,源码中的很多细节都足够我们去达到学以致用
的目的,而不是,在哪疯狂研究什么叫最长递归子序列
, 研究明白它的原理,我相信并不能让你更快的去完成需求
所以,我的结论很简单,懂不懂的不用要,完成业务很重要
我们的技术学习要以务实为主,借鉴源码的方案,解决业务中的问题,这才是最后的终极之道
哪有人又问了,这玩意面试要考啊?
你怎么能说不重要呢?
请注意,在面试中要考的是原理,并不是源码,
其实面试之所以要考,是市场的供需关系决定的,市场人太多了,他需要有手段去筛选掉一部分人,比如,按照学历筛选,按照长相筛选,当然也可以按照原理筛选
虽然这种筛选方式并不怎么公平,可在有限的时间内,面试官能问你什么呢?
他总不能跟你聊理想吧
所以,将技术的高低八股化
,也是各位码农前辈的伟大智慧
他不一定能找到厉害的人,却一定能招到毅力的人,毕竟能吃苦,肯背诵,学习劲头自然差不到哪去
于是,八股文、算法就会被沿用至今,虽不合理,却很合法
而我之所以说他没用,是因为,在浩如烟海的前端知识库中,八股文,就那么几道。
所谓临阵磨枪,不快也光,我们只需要像上学一样,花几天时间,就能用很短的时间考到很高的分数!
你天天研究,日日诵读,真的不如在单位内学以致用
,利用学到的东西把业务做好, 升职加薪有你
,年终大奖有你
,哪怕跳槽,优秀的职业经历也有你
。
好了,片汤话讲完了,下面讲点实在的,我准备重启专栏了,开启vue的系列文章的分析之旅,
毕竟东家又要给钱了,必须得认真分析一波,我是个实用主义者。
所以,我的分析将要从几方面讲起,争取从实际的实用角度讲起,具体的大致要从6个方面分析
希望各位 jy
捧场,莅临指导。。。。