2024-01-01·11 min read

开始卷不动的前端

前端技术体系梳理:从语言熟练度到工程化流程的系统归类

前端职业发展

前述

如果说前两年还有web component, wasm,基于es module快速打包,前端还在狂卷一条街。那么从今年开始,前端似乎已经进入了完全内卷的阶段,看不到什么新的东西了。最近也就看到一个前司新出rspack,然后就是各种新API的提案。当然可能也是我个人的注意力都在AI上了。

最近要准备面试,正好不知道从哪开始,只能把我认为的前端知识体系,做一个系统的归类和总结。刚好也作为简历能力的一种归类。

如果说用面试的知识体系来评价一个人的话,在我心中大概是下面几个方向。不熟的就瞎说说,不对就不对吧

语言熟练度

  • 熟练度是量变引起质变的东西
  • 虽然在类型提示各种插件遍布的今天,甚至ChatGpt能帮你纠正各种错误的语法,熟练的语言不再能带来太多优势。
  • 但是我觉得当你多写这门语言的代码,肯定能对本身一些设计的初衷,存在的问题,产生更多的思考。
  • 可以说这里属于很硬实的基本功,虽然八股文被人人喊打,认为不懂这一道题又如何,查查谷歌、gpt,答案立马就有,但是如果超过一定的题目都不懂,就会引起所说的质变了。

前端语言部分我觉得包括

  1. Javascript 包括es5 es6各种语法的熟练度
  2. React框架下的各种语法,这里其实内容很多。我不熟悉Vue就不单聊了,其实React的官网最近做了更新,我从零重新看了一遍,从教程的思路出发,理解了很多设计上的思路。
  3. Typescript 包括其本身基础语法的各种Utils,类型推导语法,以及上述各种语言关于ts的基础使用方式
  4. css主要指css、css3的一些语法、sass或者less的基础语法、tailwindcss的基础语法
    1. 其实css内容真细究,之前看张鑫旭书里的一些内容,还是非常非常细的,虽然日常开发大都用不到。现在说不定可能把书喂给gpt当知识库用更合理(
  5. nextjs、webpack社区更多使用的框架:经常有人戏谑说前端是配置config文件的书写工程师,各种属性定义都可以通过官网查到,这里把他归为一类“语言语法”也毫不为过
  6. 算法和设计模式

工程化流程

  • 工程化本身的内容很多,但也离不开一些基础知识,可以说前端社区最重、最劝退、最多解决方案的部分,就在这里。
  • 工程化其实是在做技术产品。产品经理需要知道用户想要什么,用户也会不断提出自己的需求。这里又会回到乔布斯说的,是需求驱动技术,还是技术决定了需求的问题。
  • 都有什么需求?这样罗列下来就是工程化的部分了。

时间更短、体积更小的编译

  • 为啥前端需要编译,可能是尝试进入前端学习门槛的第一个重要问题
  • webpack 提供的各种loader、loader的原理
  • 体积更小,除了简单的混淆压缩之外,更为重要的是两个方面,treeshaking和lazy
  • 前者是去除代码中不需要的部分,又涉及到webpack是怎么标记变量巴拉巴拉
  • 后者广义上就是拆包,也是把给用户展现不需要的部分,放到其他时机加载。这里的不需要的部分和其他时机又有很多。
  • Split chunk使用到的浏览器缓存
  • 近来最卷的以vite为首提供的es module打包dev环境,确实很快,浏览器支持果然才是最终方案,但可惜原来包袱太重,esm支持的包还是需要进一步迭代,现阶段还是只能dev使用吧
  • 另一方面是各种底层编译器的竞争,这块我实在不懂。esbuild为什么这么快。让我研究一下rspack干了啥
  1. 更方便的定制中间件处理

当你提供了上面一套基准方案后,你的产品被大伙使用,自然会出现社区生态。原来的中间件设计方案就更为关键。

  1. 方便的共享复用
  • 这里涉及到包定义一大堆cjs,esm的部分
  • 然后是各个包之间是怎么互相引用,循环引用是什么

比较常见的共享

  • 发布npm包
  • monorepo下的workspace的npm包
  • 基于nextjs transpilePackages的类似合并打包的思路
  • 基于webpack5 模块联邦的复用
  • 基于微前端沙箱,直接bundle级别的复用
  1. 最少的配置
  • 最少的配置本身是一个伪命题,基于某某名言“复杂度不会凭空消失”,不管是各种上层框架,多半是基于“约定”,或者更”直觉”的想法,定义一些属性,当你要修改的时候,又得爬到它们的官网,搜索对应的开关配置是什么
  • 因此这里的点其实是等于上面熟练度提到的语法及语法糖部分

工作流

页面渲染流程

这本身也是react vue这部分框架做的事情

  • 数据驱动dom操作方便已经成为必然
  • 不得不说虚拟dom的设计

数据管理

跨端版本

基于虚拟dom的概念,上面的前端在其他端可以说重新来了一遍。

小程序特有的同步机制,以及原生移动端组件,事件。打包发版,确实是又有一套生态。

然而我基本都没做过。

Nodejs也是我不太熟悉的领域。虽然写过bff层,但是严格说这块属于后端。但是卷就是要把别人干的活颁给自己干。

说起来sass这类服务应该也是归于这里吧,服务我理解的重点应该是,稳定性,可扩容性,sass应该还包括冷启动调用的问题种种