? 這是什麼?
筆者在學會 JS 以及框架的應用後,有一段時間不知道該如何深入下去,活能幹,就是不知道該學啥。相信這個問題也會有很多讀者朋友遇到。
當然筆者目前已經突破了這個瓶頸,也成為了知名公司基礎架構組的成員。因此想通過自己成長的經歷及積累的資料整理出一系列的學習路線及資料推薦,幫助各位讀者朋友解決這個問題。
倉庫內容筆者為主要貢獻者,另外還拉了將近 20 位資深前端開發做內容共建及稽核,多數人員任職一線大廠 P6、P7,第一版耗時數週,大家國慶假期也沒停歇,內容絕對讓各位看官滿意。
此資料適用於小白入門、初中級進階、高階查漏補缺。
內容每天都在更新,大家可以持續關注。
這裡是 Github 連結,最新內容都會首先更新在 Github,如果你覺得內容對你有幫助,可以點個 Star。
? 如何使用
如果你是初中級工程師來說,筆者也推薦先行學習「前端核心學習路徑」,主要是鞏固基礎,之後再挑選感興趣的主題。
如果你是高階工程化,筆者推薦跳過「前端核心學習路徑」,直接挑選感興趣的主題學習即可。
以下所有知識點筆者都會幫助讀者朋友們將知識連貫起來,從而建立自己的知識體系而不是單獨記憶鬆散的知識點。
如何獲取本文資料
筆者已經將倉庫內容裡的重要資料整理好了,另外還附贈了前端 10 萬字的面試攻略,已經幫助上千人拿到 offer。大家可以關注【公眾號】傳送「資料」獲取。
? 目錄
讀者朋友可以前往 Github 瀏覽目錄。
如何高效自學
自學是每個工程師都需要掌握的一項技能。這個學習方法筆者百試百靈,學習任何技術都會用上這個思路。另外我們還能通過這個思路拓寬自己的技術棧,將各個知識聯絡起來建立自己的知識體系,並且通過這種學習方式學到的知識也不容易遺忘。
書籍推薦
以下書籍主要還是推薦了 JS 方面的,其它比如說框架、TS 等等技術會在各自章節為大家介紹。
初級
進階
- JavaScript 忍者祕籍(第 2 版)
- 你不知道的 JS 三卷,該書英文版是開源的,並且作者已經在寫第二版,有能力閱讀英文的讀者推薦直接看 原著
高階
上述書籍大家可以關注【公眾號】傳送「資料」獲取,另外還附贈了前端 10 萬字的面試攻略,已經幫助上千人拿到 offer。
前端核心學習路徑
前端知識點很多這是公認的事情,但是我們確實沒必要把所有知識都去學習,那樣只會貪多嚼不爛。我們能把核心知識點、熱門技術以及工作中需要用到的知識學好就已經能打敗大部分前端工程師了,剩下的大家可以自行根據興趣選擇學習內容。
但是在學習其他內容之前,筆者強烈推薦各位務必一定一定先把基礎打紮實了,基礎不好真的不可能把自己技術往上拔高的。
為了保證大家學到的知識是正確的,下文中的文件資料筆者都使用了英文版本。因為在稽核資料的過程中筆者發現不少中文文件都存在翻譯錯誤或者過時的情況。
如果你還是一位初學者,推薦先自行完整閱讀一至二本書後再按照該計劃學習,因為以下計劃並沒有囊括 JS 的所有知識,而是列出了所有核心知識點。
關於書籍筆者推薦以下兩本:
JS 核心知識點
資料型別
JS 資料型別分為兩大類及八種資料型別,注意別漏了 ES6 新增的 bigint
。
型別判斷
型別判斷有好幾種方式,分別為:
typeof
instanceof
Object.prototype.toString
isXXX
,比如isArray
文件
推薦文章,Issue 也挺重要
型別轉換
型別轉換算是 JS 中情況繁雜且容易出錯,但是開發中還經常會遇到的知識點。強行全部記憶容易遺忘,推薦記憶及練習開發中的常見情況。
文件
推薦文章
this
this
算是不少初學者容易搞混的一個知識點,但是它很重要,務必掌握。
文件
推薦文章
閉包
閉包特別常用,但是其實挺多工程師對於閉包的理解是錯誤的。
文件
推薦文章
- You Don't Know JS 第二版中對於閉包的解釋,該版本暫無中文翻譯,讀者可用 DeepL 進行翻譯。
- JavaScript 的靜態作用域鏈與“動態”閉包鏈
- 知乎中關於閉包的討論
作用域
作用域是指程式中定義變數的區域,該位置決定了變數的生命週期,也就是變數和函式的可訪問範圍。
文件
推薦文章
變數提升
變數提升(Hoisting)可以將變數和函式在編譯階段放入記憶體,從而在執行階段時在宣告前使用。
文件
- JS 變數提升,變數提升的概念
推薦文章
- JavsScript 變數提升和函式提升,深度解析變數提升和函式提升,舉例說明各種情況下的變數提升
- 我用了兩個月的時間才理解 let,深度理解解析 let 和 val 的區別,和 let 的暫時死區
- JavaScript Scoping and Hoisting,JavaScript 中的作用域和函式宣告和變數宣告的提升
new
new
操作符可以幫助我們構建出一個例項,並且繫結上 this
。
call、apply、bind
文件
推薦文章
- JS 中的 call、apply、bind 方法詳解,對這三個方法的使用、面試題及具體實現做了詳解
- call 和 apply 的模擬實現,模擬實現 call 和 apply,幫助更好理解
- bind 的模擬實現,模擬實現 bind,幫助更好理解
原型
通過原型這種機制,JavaScript 中的物件從其他物件繼承功能特性。
文件
推薦文章
Class
class
只是原型鏈的語法糖,與其它語言中的類不是同一樣東西。
文件
推薦文章
繼承
繼承是面嚮物件語言(Object-Oriented Language)三大特徵之一,在 JS 中也佔有非常重要的地位。而想要實現繼承有多種方式,它們都有各自的優缺點。
文件
推薦文章
模組化
這塊知識必會,最好了解下模組化的前世今生以及對 ES6 的原生模組化有個深入的理解。
文件
推薦文章
- 【深度全面】前端 JavaScript 模組化規範進化論,記錄了 JS 模組化的進化之路
- JavaScript modules,由淺入深解釋 JS 模組化
- ES modules: A cartoon deep-dive,一篇對 JS 模組化深入解釋的文章,另有 中文版
Promise
文件
- 推薦文章
- Callbacks Vs Promises and basics of JS,需自備梯子
- 最簡實現 Promise,支援非同步鏈式呼叫(20 行)
- 100 行程式碼實現 Promises/A+ 規範
- Github
- promise-fun
迭代器與生成器
文件
推薦文章
- [[譯] 什麼是 JavaScript 生成器?如何使用生成器?](https://juejin.cn/post/684490...)
- Understanding Generators in ES6 JavaScript with Examples,需自備梯子
- A Simple Guide to ES6 Iterators in JavaScript with Examples,需自備梯子
async await
事件迴圈
大家都知道 JS 是一門單執行緒的非阻塞的指令碼語言。這也就意味著,程式碼在執行的任何時候只有一個主執行緒來處理所有的任務。所以弄懂事件迴圈機制對我們學習 JS 至關重要。
文件
推薦文章
事件迴圈視覺化
節流與防抖
節流指連續觸發事件的情況下,在某個時間段內,函式只會執行一次。
防抖指在事件被觸發一定時間後再執行回撥函式,如果在一定時間內該事件又被重複觸發,則重啟計時。
推薦文章
柯里化
柯里化就是將接收多個引數的函式轉換成接收一個引數的函式。
垃圾回收
JavaScrip 在變數被建立時分配記憶體,並在物件不再使用時自動釋放記憶體,這個過程被稱為垃圾回收。另外我們主要學習 V8 引擎下的垃圾回收機制。
文件
推薦文章
其他零散但重要的知識點
- 0.1 + 0.2 !== 0.3,JS 浮點數會造成的問題
如果你覺得以上內容對你有幫助,可以前往 Github 點個 Star 支援一下。
HTML
語義化
html 語義化就是讓頁面的內容結構化,便於對瀏覽器、搜尋引擎解析。在沒有引入樣式 CCS 樣式的時候也能以一種可以分辨出來大致表示內容的文件格式顯示,並且是容易閱讀的。 搜尋引擎的爬蟲依賴於標記來確定上下文和各個關鍵字的權重,利於 SEO。 使閱讀原始碼的人對網站更容易將網站分塊,便於閱讀維護理解。
文件
- HTML 中的語義,什麼是 HTML 語義化,HTML 語義化有什麼好處
推薦文章
- IFE-NOTE:頁面結構語義化,HTML5 語義化中的頁面結構語義化的一些經驗和理解
- 關於 HTML 語義和前端架構,HTML 語義化在開發中配合 CSS 結構化類名的使用構建可重用和可組合的元件
CSS
推薦文章
盒子模型
在 CSS 中,所有的元素都被一個個的“盒子(box)”包圍著,我們廣泛地使用兩種“盒子” —— 塊級盒子 (block box) 和 內聯盒子 (inline box),理解這些“盒子”的基本原理,是我們使用 CSS 實現準確佈局、處理元素排列的關鍵。
文件
- CSS 盒子模型,官方文件深入瞭解 CSS 盒子模型
推薦文章
- CSS 盒模型之內邊距、邊框、外邊距 十九問,通過舉例說明盒子模型各種常見形態和問題
- CSS Box Model,盒子模型的一些規範介紹
- CSS 盒模型詳解(圖文教程),通過圖片和例子說明盒子模型的各個部分和在頁面上的表現形式
選擇器
CSS 中,選擇器用來指定網頁上我們想要樣式化的 HTML 元素。CSS 選擇器提供了很多種方法,所以在選擇要樣式化的元素時,我們可以做到很精細的地步。
CSS 選擇器是 CSS 規則的第一部分。它是元素和其他部分組合起來告訴瀏覽器哪個 HTML 元素應當是被選為應用規則中的 CSS 屬性值的方式。選擇器所選擇的元素,叫做“選擇器的物件”。
文件
- CSS 選擇器,官方文件詳細地講授選擇器的不同使用方式,並瞭解它們的工作原理。
推薦文章
- 30 個你必須熟記的 CSS 選擇器,開發中常用的 CSS 選擇器,熟練掌握以後可以很大程度提高 CSS 的編碼體驗
- 深入解析 CSS 樣式優先順序,詳細介紹了 CSS 樣式的權重優先順序,避免寫重複樣式和樣式被覆蓋不生效的問題
Flex
文件
推薦文章
實戰
- FLEXBOX FROGGY 一個趣味性小遊戲學習 Flex 的網站
grid
其他
框架
框架一般選其一深入學習即可。
虛擬 DOM
Virtual DOM 也就是虛擬節點。通過 JS 的 Object 物件模擬 DOM 中的真實節點物件,再通過特定的 render 方法將其渲染成真實的 DOM 節點。
路由
路由在 SPA 架構中都有被用到,實際原理就是運用 hash
及 history
相關的 API 實現。
文件
推薦文章
- 前端路由簡介以及 vue-router 實現原理,對前端路由及 Vue-Route 庫原理做了解釋,幾個框架的路由庫原理都一致
React
學習框架務必從文件出發,起碼熟讀一遍及自己寫過一些初步的 Demo 之後再考慮學習別的資料。
React 推薦學習路徑
大家可以跟著以上學習路徑學習,其中除了概念相關的內容是必須學習之外,生態相關的內容大家可以在使用時再學習。
React 推薦學習資料
- React 學習之道,可以 0 元購買
- React 生命週期
如何編寫一個元件
文件
推薦文章
受控元件和非受控元件
- 受控元件:在 HTML 中,表單元素(如 input、 textarea 和 select )通常自己維護 state,並根據使用者輸入進行更新。而在 React 中,可變狀態(mutable state)通常儲存在元件的 state 屬性中,並且只能通過使用 setState() 或者 props 來更新
- 非受控元件:是一個儲存其自己的內部狀態,並且您使用查詢 DOM ref,當你需要它來找到它的當前值,這有點像傳統的 HTML
文件
推薦文章
- 受控和非受控元件真的那麼難理解嗎
- [[譯]受控元件 & 非受控元件](https://www.baobangdong.cn/co...)
高階元件(HOC)
高階元件(HOC)是 React 中用於複用元件邏輯的一種高階技巧。HOC 自身不是 React API 的一部分,它是一種基於 React 的組合特性而形成的設計模式。
具體而言,高階元件是引數為元件,返回值為新元件的函式。
Hooks
Hook 是 React 16.8 的新增特性。它可以讓你在不編寫類元件的情況下使用 React 的特性。
合成事件
合成事件(SyntheticEvent)是 React 模擬原生 DOM 事件所有能力的一個事件物件,即瀏覽器原生事件的跨瀏覽器包裝器。React 根據 W3C 規範 定義了合成事件。需要注意的是 v16 和 17 版本中的合成事件有差異。
文件
推薦文章
React 路由
- react-router,React 宣告式路由
- reach router,下一代的 React 路由
React 狀態管理
React 狀態管理可謂百花齊放百家爭鳴,遠遠不止筆者列的這些庫。但是實際上很多專案完全是不需要用到狀態管理的,反而是增加編碼複雜度,其實利用 React Context 或者 react-query 這類介面請求庫就能很好地滿足需求了。
- redux,JS 應用的狀態容器,提供可預測的狀態管理
- mobx,簡單,可擴充套件的狀態管理庫
- recoil,React 狀態管理庫
- 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 方案
- styled-components,CSS in JS 方案
- tailwindcss,Atom CSS 方案
React 原理
- react-source-code-debug,學習如何除錯原始碼
- react-illustration-series,圖解 react 原始碼,用大量配圖的方式,致力於將 react 原理表述清楚
- just-react,「React 技術揭祕」,一本自頂向下的 React 原始碼分析書
- tiny-react,基於 React17 精簡而來的最小版實現
Blog 推薦
- Dan Abramov,React 核心開發者的 Blog
Vue
學習框架務必從文件出發,起碼熟讀一遍及自己寫過一些初步的 Demo 之後再考慮學習別的資料。
對於 Vue 來說,官方文件內容相當齊全,並且全家桶也都是官方出的,因此無需頭疼技術棧選型。
Vue 推薦學習路徑
目前 3.0 生態並不完善,在公司內部基本需要先熟悉 2.0 的寫法,因此推薦新手先學習 2.0 的內容。
- 新手向:Vue 2.0 的建議學習順序,尤雨溪自己寫的學習路徑,時至今日也不過時
Vue 推薦學習資料
- awesome-vue
- vue-patterns,有用的 Vue 模式、技巧、提示以及有幫助的精選連結
Vue 原理
- vue-analysis,黃老師出品
- vue-design,官方人員出品,域名已過期,需要大家自行在倉庫內瀏覽內容。雖然麻煩了點,但是質量絕對過關
瀏覽器
一般說到瀏覽器,常指的都是 Chrome。瀏覽器作為前端不可或缺的載體,我們勢必需要好好學習及掌握其相關的知識。
另外瀏覽器中涉及到的知識面很多,與 JS 執行機制、網路、效能優化、安全等領域都有關聯,因此大家在學習這部分的內容時需要多與之前學習的知識聯絡起來。
架構
- Inside look at modern web browser,這是一個 Google 出的系列專欄,共有四篇文章,內容上到瀏覽器的整體架構,下至頁面的渲染規則都說了一遍,另有 中文翻譯
整體流程
- 瀏覽器的工作原理:新式網路瀏覽器幕後揭祕,這雖然是一篇 11 年的文章,但是內容在如今也不過時,文章廣為流傳
- 當···時發生了什麼?,經典面試題,文中對於這個流程裡的相關內容力求儘可能具體,不遺漏任何細節
- 從輸入 URL 到頁面載入完成的過程中都發生了什麼事情?,這篇文章涉及了大量網路及硬體知識
渲染相關
- 瀏覽器的渲染原理簡介,左耳朵耗子出品,如果上文「瀏覽器的工作原理:新式網路瀏覽器幕後揭祕」覺得太長不看或者看完覺得沒看懂什麼,那麼可以來閱讀下本文,起碼能從中學會一些能用在工作上的東西
- 瀏覽器的迴流與重繪 (Reflow & Repaint)
JS 執行機制
- 從瀏覽器多程式到 JS 單執行緒,JS 執行機制最全面的一次梳理,超長文,這篇文章能讓你對程式執行緒,瀏覽器多程式、瀏覽器核心多執行緒、JS 單執行緒、JS 執行機制有個不錯的理解
快取
- 文件
- 徹底理解瀏覽器的快取機制,瀏覽器快取機制與效能優化息息相關
Devtools
- Chrome DevTools,Google 出的 DevTools 的使用說明書,對於每個功能的使用都有詳細的介紹,看啥文章都不如看這個
- Chrome_Devtools_Tricks,介紹了 Chrome DevTools 的使用技巧,從不同的情景來說明應該如何搭配使用 Chrome DevTools 中的小技巧,適合英文不怎麼好的讀者閱讀
瀏覽器安全
- 文件
- 一文讀懂 Web 安全,簡單介紹了一些前端需要注意的安全知識
- the-book-of-secret-knowledge,如果你對安全領域有興趣,可以閱讀下這個倉庫的內容
效能優化
效能優化是一個系統性工程,涉及到的方面很多,不僅僅只是大家常說的靜態檔案和程式碼優化那麼簡單。
大家學習這部分內容的時候可以先從推薦的文章中瞭解具體有哪些效能優化手段及具體方法,然後根據這些內容去實驗。
推薦書籍
其實效能優化相關的書籍市面上出的不多,優秀的也都是好幾年前的老書了,看不看也無所謂了。
- Web 效能權威指南,豆瓣 8.9 分,老書
- 高效能網站建設進階指南,豆瓣 8.9 分,老書
推薦網站
- web.dev,Google 自家的 blog,你能在這上面學到很多效能優化及如何做好使用者體驗的知識,其實很多市面上的文章內容都有這個網站的影子
整體優化建議
- 前端效能優化 24 條建議(2020),類似現代版雅虎軍規
- 前端效能優化之旅,系統性介紹效能優化的手段,參考資料也值得學習
- Front-End Performance Checklist 2021,一本很火的免費 PDF,包含了很多效能優化相關的 Checklist
- React 效能優化 | 包括原理、技巧、Demo、工具使用
效能指標
- 文件
- 還在看那些老掉牙的效能優化文章麼?這些最新效能指標瞭解下,文章會介紹谷歌提倡的七個使用者體驗指標(也可以認為是效能指標)
- 做效能優化時,我們關注哪些指標?
效能監控
- 前端搞工程化:從零打造效能檢測庫「原始碼 + 視訊」,光會效能優化的手段還是不夠的,如何體現優化的價值也是至關重要的
TypeScript
TypeScript 是為開發大型應用而設計的,並且 TypeScript 可轉譯成 JavaScript。由於 TypeScript 是 JavaScript 的嚴格超集,任何現有的 JavaScript 程式都是合法的 TypeScript 程式。
文件
推薦文章
推薦開源專案
Electron
Electron 是一個可以使用 Web 技術如 JavaScript、HTML 和 CSS 來建立跨平臺原生桌面應用的框架。藉助 Electron,我們可以使用純 JavaScript 來呼叫豐富的原生 APIs。
文件
推薦文章
推薦開源專案
元件庫
元件庫顧名思義指的就是將多個公共模組或者可複用的元件提取整合生成的一個倉庫
知名度較廣的元件庫:
相關文件:
推薦文章:
- 從 0 到 1,搭建一個體系完善的前端 React 元件庫
- 如何規範你的 Git commit?
- 基於 lerna 和 yarn workspace 的 monorepo 工作流
- FusionNext 可配置能力從 Sass 體系升級為支援 Css Variable
微前端
是一種類似於微服務的架構,它將微服務的理念應用於瀏覽器端,即將單頁面前端應用由單一的單體應用轉變為多個小型前端應用聚合為一的應用。
優勢:
- 程式碼庫更小,更內聚、可維護性更高
- 鬆耦合、自治的團隊可擴充套件性更好
- 漸進地升級、更新甚至重寫部分前端功能成為了可能
- 獨立開發部署,縮小變更範圍,進而降低相關風險
框架:
- single-spa
- 螞蟻-乾坤
- 淘系-icestark
- 位元組-Garfish
- 京東-micro-app
- Bit
- EMP - Micro Frontends solution 基於 webpack 5 & module federation
推薦文章:
- 從零到一實現企業級微前端框架,保姆級教學
- 位元組跳動是如何落地微前端的
- What Are Micro Frontends?
- Bifrost 微前端框架及其在美團閃購中的實踐
- 每日優鮮供應鏈前端團隊微前端改造
- 微前端在美團外賣的實踐
- How We Build Micro Frontends
- Revolutionizing Micro Frontends with Webpack 5, Module Federation and Bit
推薦學習資料
- microfrontend-resources ,? 關於微前端的各類資料推薦
跨端框架
跨端的最主要的含義就是一套程式碼多端執行,減少重複勞動
目前看來,國內比較流行的是小程式, H5, App 三端跨的框架, uniapp 及 taro 是其中做的比較出彩的兩個框架。當然在 taro3.0 之前(以下主要是說小程式),taro 跟 uniapp 都是使用編譯時做更多的事情,編譯成小程式能夠執行的程式碼。
而在 taro3.0 之後變成了與 remax 相同的思想,在執行時做更多的事情,保證了原框架程式碼能夠完全使用,而不需要為了轉換成其他小程式時做相容。
監控
當業務進入穩定,最需要做的肯定是對於業務線上的各種效能、異常及常規業務進行監控,避免在上線之後成為瞎子。
目前市場比較出名的監控系統:
推薦開源庫:
- rrweb,提供畫素級的錄製與回放,幫助正確定位問題是如何發生的
- monitor,? 一款輕量級的收集頁面的使用者點選行為、路由跳轉、介面報錯、程式碼報錯、並上報服務端的 SDK
- mitojs 上面
monitor
作者新維護的庫。全新插拔式的監控 SDK,程式碼架構更清晰,配置項更豐富,高度可定製化
推薦文章:
日常充電
- Best-websites-a-programmer-should-visit,優秀的工程師都應該閱讀的網站
CSS 日常充電
Github 優秀學習資料
JS 優秀學習資料
- 33-js-concepts
- JavaScript 安全指南
- What the f*ck JavaScript?,有趣的 JavaScript 示例列表,附有解釋
- clean-code-javascript,適應於 JavaScript 的優雅程式碼建議
React 優秀學習資料
- react-philosophies,React 哲學,內容為寫 React 程式碼時思考的事情
程式碼樣式及安全
- secguide,面向開發人員梳理的程式碼安全指南
生產力工具
流程圖
最後
內容其實目前只能算作是第一版,並不完善,歡迎大家參與投稿內容,這裡是倉庫連結