2024-01-01·11 min read
开始卷不动的前端
前端技术体系梳理:从语言熟练度到工程化流程的系统归类
前端职业发展
前述
如果说前两年还有web component, wasm,基于es module快速打包,前端还在狂卷一条街。那么从今年开始,前端似乎已经进入了完全内卷的阶段,看不到什么新的东西了。最近也就看到一个前司新出rspack,然后就是各种新API的提案。当然可能也是我个人的注意力都在AI上了。
最近要准备面试,正好不知道从哪开始,只能把我认为的前端知识体系,做一个系统的归类和总结。刚好也作为简历能力的一种归类。
如果说用面试的知识体系来评价一个人的话,在我心中大概是下面几个方向。不熟的就瞎说说,不对就不对吧
语言熟练度
- 熟练度是量变引起质变的东西
- 虽然在类型提示各种插件遍布的今天,甚至ChatGpt能帮你纠正各种错误的语法,熟练的语言不再能带来太多优势。
- 但是我觉得当你多写这门语言的代码,肯定能对本身一些设计的初衷,存在的问题,产生更多的思考。
- 可以说这里属于很硬实的基本功,虽然八股文被人人喊打,认为不懂这一道题又如何,查查谷歌、gpt,答案立马就有,但是如果超过一定的题目都不懂,就会引起所说的质变了。
前端语言部分我觉得包括
- Javascript 包括es5 es6各种语法的熟练度
- React框架下的各种语法,这里其实内容很多。我不熟悉Vue就不单聊了,其实React的官网最近做了更新,我从零重新看了一遍,从教程的思路出发,理解了很多设计上的思路。
- Typescript 包括其本身基础语法的各种Utils,类型推导语法,以及上述各种语言关于ts的基础使用方式
- css主要指css、css3的一些语法、sass或者less的基础语法、tailwindcss的基础语法
- 其实css内容真细究,之前看张鑫旭书里的一些内容,还是非常非常细的,虽然日常开发大都用不到。现在说不定可能把书喂给gpt当知识库用更合理(
- nextjs、webpack社区更多使用的框架:经常有人戏谑说前端是配置config文件的书写工程师,各种属性定义都可以通过官网查到,这里把他归为一类“语言语法”也毫不为过
- 算法和设计模式
工程化流程
- 工程化本身的内容很多,但也离不开一些基础知识,可以说前端社区最重、最劝退、最多解决方案的部分,就在这里。
- 工程化其实是在做技术产品。产品经理需要知道用户想要什么,用户也会不断提出自己的需求。这里又会回到乔布斯说的,是需求驱动技术,还是技术决定了需求的问题。
- 都有什么需求?这样罗列下来就是工程化的部分了。
时间更短、体积更小的编译
- 为啥前端需要编译,可能是尝试进入前端学习门槛的第一个重要问题
- webpack 提供的各种loader、loader的原理
- 体积更小,除了简单的混淆压缩之外,更为重要的是两个方面,treeshaking和lazy
- 前者是去除代码中不需要的部分,又涉及到webpack是怎么标记变量巴拉巴拉
- 后者广义上就是拆包,也是把给用户展现不需要的部分,放到其他时机加载。这里的不需要的部分和其他时机又有很多。
- Split chunk使用到的浏览器缓存
- 近来最卷的以vite为首提供的es module打包dev环境,确实很快,浏览器支持果然才是最终方案,但可惜原来包袱太重,esm支持的包还是需要进一步迭代,现阶段还是只能dev使用吧
- 另一方面是各种底层编译器的竞争,这块我实在不懂。esbuild为什么这么快。让我研究一下rspack干了啥
- 更方便的定制中间件处理
当你提供了上面一套基准方案后,你的产品被大伙使用,自然会出现社区生态。原来的中间件设计方案就更为关键。
- 方便的共享复用
- 这里涉及到包定义一大堆cjs,esm的部分
- 然后是各个包之间是怎么互相引用,循环引用是什么
比较常见的共享
- 发布npm包
- monorepo下的workspace的npm包
- 基于nextjs transpilePackages的类似合并打包的思路
- 基于webpack5 模块联邦的复用
- 基于微前端沙箱,直接bundle级别的复用
- 最少的配置
- 最少的配置本身是一个伪命题,基于某某名言“复杂度不会凭空消失”,不管是各种上层框架,多半是基于“约定”,或者更”直觉”的想法,定义一些属性,当你要修改的时候,又得爬到它们的官网,搜索对应的开关配置是什么
- 因此这里的点其实是等于上面熟练度提到的语法及语法糖部分
工作流
页面渲染流程
这本身也是react vue这部分框架做的事情
- 数据驱动dom操作方便已经成为必然
- 不得不说虚拟dom的设计
数据管理
跨端版本
基于虚拟dom的概念,上面的前端在其他端可以说重新来了一遍。
小程序特有的同步机制,以及原生移动端组件,事件。打包发版,确实是又有一套生态。
然而我基本都没做过。
Nodejs也是我不太熟悉的领域。虽然写过bff层,但是严格说这块属于后端。但是卷就是要把别人干的活颁给自己干。
说起来sass这类服务应该也是归于这里吧,服务我理解的重点应该是,稳定性,可扩容性,sass应该还包括冷启动调用的问题种种