歡迎關注前端早茶,與廣東靚仔攜手共同進階
前端早茶專注前端,一起結伴同行,緊跟業界發展步伐~
公眾號作者:廣東靚仔
如何高效自學
自學是每個工程師都需要掌握的一項技能。這個學習方法筆者百試百靈,學習任何技術都會用上這個思路。另外我們還能通過這個思路拓寬自己的技術棧,將各個知識聯系起來建立自己的知識體系,並且通過這種學習方式學到的知識也不容易遺忘。
書籍推薦
以下書籍主要還是推薦了 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
迭代器與生成器
- 文檔
- 推薦文章
async await
事件循環
大家都知道 JS 是一門單線程的非阻塞的腳本語言。這也就意味着,代碼在執行的任何時候只有一個主線程來處理所有的任務。所以弄懂事件循環機制對我們學習 JS 至關重要。
- 文檔
- 推薦文章
- 事件循環可視化
節流與防抖
節流指連續觸發事件的情況下,在某個時間段內,函數只會執行一次。 防抖指在事件被觸發一定時間后再執行回調函數,如果在一定時間內該事件又被重復觸發,則重啟計時。
- 推薦文章
柯里化
柯里化就是將接收多個參數的函數轉換成接收一個參數的函數。
垃圾回收
JavaScrip 在變量被創建時分配內存,並在對象不再使用時自動釋放內存,這個過程被稱為垃圾回收。另外我們主要學習 V8 引擎下的垃圾回收機制。
- 文檔
- 推薦文章
- 深入理解 Chrome V8 垃圾回收機制,該文章的參考文獻也可閱讀下
- GC in v8
- JavaScript 工作原理:內存管理 + 處理常見的 4 種內存泄漏,另有中文版
其他零散但重要的知識點
- 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
-
文檔
-
推薦文章
高階組件(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,面向開發人員梳理的代碼安全指南
生產力工具
流程圖
歡迎關注前端早茶,與廣東靚仔攜手共同進階
前端早茶專注前端,一起結伴同行,緊跟業界發展步伐~
公眾號作者:廣東靚仔