Go to file
2021-10-10 21:12:07 +08:00
.github/workflows Update markdown.yml 2021-09-14 16:30:40 +08:00
.idea feat: update 2021-03-09 07:27:57 +08:00
Answer feat: 类型判断 2021-09-13 19:26:53 +08:00
deep feat: 第一期精读 2021-06-05 17:48:14 +08:00
script chore: action 2021-03-23 11:33:40 +08:00
weekly Create 第三期.md 2021-06-21 11:55:42 +08:00
.gitignore chore: git ignore 2021-03-22 22:00:20 +08:00
LICENSE Create LICENSE 2021-09-13 11:33:05 +08:00
package.json feat: 算法 2021-04-13 21:48:01 +08:00
README.md docs: jS 基础 2021-10-10 21:12:07 +08:00
yarn.lock feat: 算法 2021-04-13 21:48:01 +08:00

Fucking Frontend

contributors Commit Stars Forks GitHub visitor badge

干爆前端。一网打尽前端学习、进阶、面试等各类内容,帮助大家一年内拿到期望的 offer大家可以关注【公众号】获取最新内容或者加我【微信】提意见(别忘了点个 Star 咯)。

🔥 这是什么?

笔者在学会 JS 以及框架的应用后,有一段时间不知道该如何深入下去,活能干,就是不知道该学啥。相信这个问题也会有很多读者朋友遇到。

当然笔者目前已经突破了这个瓶颈,也成为了知名公司基础架构组的成员。因此想通过自己成长的经历及积累的资料整理出一系列的学习路线及资料推荐,帮助各位读者朋友解决这个问题。

此资料适用于小白入门、初中级进阶、高级查漏补缺。

内容每天都在更新,大家可以持续关注。

💻 如何使用

如果你是初中级工程师来说,笔者也推荐先行学习「前端核心学习路径」,主要是巩固基础,之后再挑选感兴趣的主题。

如果你是高级工程化,笔者推荐跳过「前端核心学习路径」,直接挑选感兴趣的主题学习即可。

以下所有知识点笔者都会帮助读者朋友们将知识连贯起来,从而建立自己的知识体系而不是单独记忆松散的知识点。

推荐大家 Star 并 Fork 本项目(点击仓库顶部右上角按钮),然后 git clone 到本地后从上至下逐步完成学习计划。

如何获取本仓库资料

笔者已经将仓库内容全部分门别类整理好了,大家可以关注【公众号】发送「资料」获取。

如何贡献

推荐你认为优秀或者仓库缺失的内容至正确的位置即可,另外需要附带你的推荐理由。

📖 目录

如何高效自学

Z0qdJz

自学是每个工程师都需要掌握的一项技能。这个学习方法笔者百试百灵,学习任何技术都会用上这个思路。另外我们还能通过这个思路拓宽自己的技术栈,将各个知识联系起来建立自己的知识体系,并且通过这种学习方式学到的知识也不容易遗忘。

书籍推荐

以下书籍主要还是推荐了 JS 方面的其它比如说框架、TS 等等技术会在各自章节为大家介绍。

初级

进阶

高级

上述书籍大家可以关注【公众号】发送「资料」获取。

前端核心学习路径

前端知识点很多这是公认的事情,但是我们确实没必要把所有知识都去学习,那样只会贪多嚼不烂。我们能把核心知识点、热门技术以及工作中需要用到的知识学好就已经能打败大部分前端工程师了,剩下的大家可以自行根据兴趣选择学习内容。

但是在学习其他内容之前,笔者强烈推荐各位务必一定一定先把基础打扎实了,基础不好真的不可能把自己技术往上拔高的。

为了保证大家学到的知识是正确的,下文中的文档资料笔者都使用了英文版本。因为在审核资料的过程中笔者发现不少中文文档都存在翻译错误或者过时的情况。

如果你还是一位初学者,推荐先自行完整阅读一至二本书后再按照该计划学习,因为以下计划并没有囊括 JS 的所有知识,而是列出了所有核心知识点。

关于书籍笔者推荐以下两本:

JS

数据类型

JS 数据类型分为两大类及八种数据类型,注意别漏了 ES6 新增的 bigint

类型判断

类型判断有好几种方式,分别为:

类型转换

类型转换算是 JS 中情况繁杂且容易出错,但是开发中还经常会遇到的知识点。强行全部记忆容易遗忘,推荐记忆及练习开发中的常见情况。

this

this 算是不少初学者容易搞混的一个知识点,但是它很重要,务必掌握。

闭包

闭包特别常用,但是其实挺多工程师对于闭包的理解是错误的。

作用域

作用域是指程序中定义变量的区域,该位置决定了变量的生命周期,也就是变量和函数的可访问范围。

变量提升

变量提升Hoisting可以将变量和函数在编译阶段放入内存从而在执行阶段时在声明前使用。

new

new 操作符可以帮助我们构建出一个实例,并且绑定上 this

call、apply、bind

原型

通过原型这种机制JavaScript 中的对象从其他对象继承功能特性。

Class

class 只是原型链的语法糖,与其它语言中的类不是同一样东西。

继承

继承是面向对象语言Object-Oriented Language三大特征之一在 JS 中也占有非常重要的地位。而想要实现继承有多种方式,它们都有各自的优缺点。

模块化

这块知识必会,最好了解下模块化的前世今生以及对 ES6 的原生模块化有个深入的理解。

Promise

迭代器与生成器

async await

事件循环

大家都知道 JS 是一门单线程的非阻塞的脚本语言。这也就意味着,代码在执行的任何时候只有一个主线程来处理所有的任务。所以弄懂事件循环机制对我们学习 JS 至关重要。

节流与防抖

节流指连续触发事件的情况下,在某个时间段内,函数只会执行一次。 防抖指在事件被触发一定时间后再执行回调函数,如果在一定时间内该事件又被重复触发,则重启计时。

柯里化

柯里化就是将接收多个参数的函数转换成接收一个参数的函数。

垃圾回收

JavaScrip 在变量被创建时分配内存,并在对象不再使用时自动释放内存,这个过程被称为垃圾回收。另外我们主要学习 V8 引擎下的垃圾回收机制。

其他零散但重要的知识点

HTML

语义化

html 语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析。在没有引入样式 CCS 样式的时候也能以一种可以分辨出来大致表示内容的文档格式显示,并且是容易阅读的。 搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

CSS

盒子模型

在 CSS 中所有的元素都被一个个的“盒子box”包围着我们广泛地使用两种“盒子” —— 块级盒子 (block box) 和 内联盒子 (inline box),理解这些“盒子”的基本原理,是我们使用 CSS 实现准确布局、处理元素排列的关键。

选择器

CSS 中,选择器用来指定网页上我们想要样式化的 HTML 元素。CSS 选择器提供了很多种方法,所以在选择要样式化的元素时,我们可以做到很精细的地步。

CSS 选择器是 CSS 规则的第一部分。它是元素和其他部分组合起来告诉浏览器哪个 HTML 元素应当是被选为应用规则中的 CSS 属性值的方式。选择器所选择的元素,叫做“选择器的对象”。

Flex

grid

其他

浏览器

一般说到浏览器,常指的都是 Chrome。浏览器作为前端不可或缺的载体我们势必需要好好学习及掌握其相关的知识。

另外浏览器中涉及到的知识面很多,与 JS 执行机制、网络、性能优化、安全等领域都有关联,因此大家在学习这部分的内容时需要多与之前学习的知识联系起来。

架构

整体流程

渲染相关

JS 执行机制

缓存

Devtools

  • Chrome DevToolsGoogle 出的 DevTools 的使用说明书,对于每个功能的使用都有详细的介绍,看啥文章都不如看这个
  • Chrome_Devtools_Tricks,介绍了 Chrome DevTools 的使用技巧,从不同的情景来说明应该如何搭配使用 Chrome DevTools 中的小技巧,适合英文不怎么好的读者阅读

浏览器安全

性能优化

性能优化是一个系统性工程,涉及到的方面很多,不仅仅只是大家常说的静态文件和代码优化那么简单。

大家学习这部分内容的时候可以先从推荐的文章中了解具体有哪些性能优化手段及具体方法,然后根据这些内容去实验。

推荐书籍

其实性能优化相关的书籍市面上出的不多,优秀的也都是好几年前的老书了,看不看也无所谓了。

推荐网站

  • web.devGoogle 自家的 blog你能在这上面学到很多性能优化及如何做好用户体验的知识其实很多市面上的文章内容都有这个网站的影子

整体优化建议

性能指标

性能监控

框架

虚拟 DOM

Virtual DOM 也就是虚拟节点。通过 JS 的 Object 对象模拟 DOM 中的真实节点对象,再通过特定的 render 方法将其渲染成真实的 DOM 节点。

路由

路由在 SPA 架构中都有被用到,实际原理就是运用 hashhistory 相关的 API 实现。

React

学习框架务必从文档出发,起码熟读一遍及自己写过一些初步的 Demo 之后再考虑学习别的资料。

React 推荐学习路径

LR1Dyo

大家可以跟着以上学习路径学习,其中除了概念相关的内容是必须学习之外,生态相关的内容大家可以在使用时再学习。

React 推荐学习资料

如何编写一个组件

受控组件和非受控组件

  • 受控组件:在 HTML 中,表单元素(如 input、 textarea 和 select )通常自己维护 state并根据用户输入进行更新。而在 React 中可变状态mutable state通常保存在组件的 state 属性中,并且只能通过使用 setState() 或者 props 来更新

  • 非受控组件:是一个存储其自己的内部状态,并且您使用查询 DOM ref当你需要它来找到它的当前值这有点像传统的 HTML

  • 文档

  • 推荐文章

高阶组件HOC

高阶组件HOC是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。

具体而言,高阶组件是参数为组件,返回值为新组件的函数。

Hooks

Hook 是 React 16.8 的新增特性。它可以让你在不编写类组件的情况下使用 React 的特性。

合成事件

合成事件SyntheticEvent是 React 模拟原生 DOM 事件所有能力的一个事件对象即浏览器原生事件的跨浏览器包装器。React 根据 W3C 规范 定义了合成事件。需要注意的是 v16 和 17 版本中的合成事件有差异。

React 路由

React 状态管理

React 状态管理可谓百花齐放百家争鸣,远远不止笔者列的这些库。但是实际上很多项目完全是不需要用到状态管理的,反而是增加编码复杂度,其实利用 React Context 或者 react-query 这类接口请求库就能很好地满足需求了。

  • reduxJS 应用的状态容器,提供可预测的状态管理
  • mobx,简单,可扩展的状态管理库
  • recoilReact 状态管理库
  • xstate,有限状态机
  • zustand,简单、快速和可扩展的骨状态管理解决方案

React 接口请求

  • axios,传统接口请求库
  • react-query,用于获取、缓存和更新 React 中异步数据的 Hooks 接口请求库
  • swr,用于数据请求的 React Hooks 库

React SSR

  • nest.js,一个渐进式的 Node.js 框架,用于构建高效、可靠和可扩展的服务端应用。

React 单测

  • jest,优雅、简洁的 JavaScript 测试框架,单测必选项
  • react-testing-library,简单且完整的 React DOM 测试工具

React CSS 方案

React 原理

Blog 推荐

Vue

学习框架务必从文档出发,起码熟读一遍及自己写过一些初步的 Demo 之后再考虑学习别的资料。

Vue 推荐学习路径

目前 3.0 生态并不完善,在公司内部基本需要先熟悉 2.0 的写法,因此推荐新手先学习 2.0 的内容。

Vue 推荐学习资料

Vue 原理

  • vue-analysis,黄老师出品
  • vue-design,官方人员出品,域名已过期,需要大家自行在仓库内浏览内容。虽然麻烦了点,但是质量绝对过关

TypeScript

TypeScript 是为开发大型应用而设计的,并且 TypeScript 可转译成 JavaScript。由于 TypeScript 是 JavaScript 的严格超集,任何现有的 JavaScript 程序都是合法的 TypeScript 程序。

文档

推荐文章

推荐开源项目

Electron

Electron 是一个可以使用 Web 技术如 JavaScript、HTML 和 CSS 来创建跨平台原生桌面应用的框架。借助 Electron我们可以使用纯 JavaScript 来调用丰富的原生 APIs。

文档

推荐文章

推荐开源项目

组件库

组件库顾名思义指的就是将多个公共模块或者可复用的组件提取整合生成的一个仓库

知名度较广的组件库:

相关文档:

推荐文章:

微前端

是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。

优势:

  • 代码库更小,更内聚、可维护性更高
  • 松耦合、自治的团队可扩展性更好
  • 渐进地升级、更新甚至重写部分前端功能成为了可能
  • 独立开发部署,缩小变更范围,进而降低相关风险

框架:

推荐文章:

推荐学习资料

  • 🔥 关于微前端的各类资料推荐

跨端框架

跨端的最主要的含义就是一套代码多端运行,减少重复劳动

目前看来,国内比较流行的是小程序, H5, App 三端跨的框架, uniapptaro 是其中做的比较出彩的两个框架。当然在 taro3.0 之前以下主要是说小程序taro 跟 uniapp 都是使用编译时做更多的事情,编译成小程序能够运行的代码。

而在 taro3.0 之后变成了与 remax 相同的思想,在运行时做更多的事情,保证了原框架代码能够完全使用,而不需要为了转换成其他小程序时做兼容。

监控

当业务进入稳定,最需要做的肯定是对于业务线上的各种性能、异常及常规业务进行监控,避免在上线之后成为瞎子。

目前市场比较出名的监控系统:

推荐开源库:

  • rrweb,提供像素级的录制与回放,帮助正确定位问题是如何发生的
  • monitor👀 一款轻量级的收集页面的用户点击行为、路由跳转、接口报错、代码报错、并上报服务端的 SDK
  • mitojs 上面 monitor 作者新维护的库。全新插拔式的监控 SDK代码架构更清晰配置项更丰富高度可定制化

推荐文章:

面试

面试方法论

面经推荐

内推

日常充电

CSS 日常充电

Github 优秀学习资料

JS 优秀学习资料

React 优秀学习资料

代码样式及安全

  • secguide,面向开发人员梳理的代码安全指南

生产力工具

流程图

作者信息

微信扫码关注公众号,订阅更多精彩内容 加笔者微信进群与大厂大佬讨论技术