年終回顧,為你彙總一份「前端技術清單」
摘要:一入前端深似海。
學習文章的知識往往是碎片化的。而前端涉及到的面很廣,這些知識如果不進行有效梳理,則無法相互串聯、形成體系。因此,我結合工作體會將抽象出了一些前端基礎能力,並將看過、寫過的一些不錯的文章進行整理,形成了一份(純)前端技術清單。
不論你是正在自學前端,還是對前端某些技術熟練掌握但某些還未涉足,我都希望這份清單能幫助你 review 一些前端的基礎能力。
0. 年度報告
- 2018 前端工具調查報告
- 2018 JavaScript 調查報告
1. 基礎拾遺
溫故而知新,不知則習之,是以牢固根基。
1.1. JavaScript
- You-Dont-Know-JS [英]
-
JavaScript 基礎執行機制:
- JS 引擎、執行時與呼叫棧概述 [英]
- V8 引擎簡介 [英]
- 記憶體管理與4中常見的洩漏 [英]
- Event Loop(面試裡總會有一題 Event Loop…):
- Web Workers 及其5個常見使用場景 [英]
- 如何避免 async/await 地獄 [英]
- “回撥地獄”的解決思路彙總
1.2. CSS
- You-Need-to-Know-CSS
- CSS佈局指南
- 在 (S)CSS 中實現主題功能的 4½ 種方法 [英]
- CSS 中的各類換行處理方式 [英] :處理經典的換行問題
- 瀏覽器將rem轉成px時有精度誤差怎麼辦?
- 精準操控的滾動體驗,淺談新標準 Scroll Snap
-
如何完美實現一個非
button
元素的按鈕 [英] - 巧用 CSS Grid 來建立橫向滾動容器 [英]
- 如何處理內聯元素中的空隙 [英]
- CSS Stacking Context 裡那些鮮為人知的坑
1.3. 瀏覽器
- 瀏覽器的工作原理
- 現代瀏覽器內部是如何執行的:
- 完整的頁面生命週期 API 介紹 [英]
- 四個新的觀察者:Intersection / Mutation / Resize / Performance (Observer)
- 渲染引擎工作方式及優化建議 [英]
- 瀏覽器核心渲染:重建引擎
- 跨域解決方案彙總
2. 工程化與工具
軟體規模的擴大帶來了工程化的需求,前端也不例外。隨著 NodeJS 的出現,前端工程師可以使用熟悉的 JS 快速開發所需的工具。工具鏈生態的繁榮也是前端圈繁榮的一個寫照。
2.1. webpack
- webpack 中的 Chunk 關係圖演算法 [英]
- webpack 進階系列文章
- 編譯優化:
- 關於 webpack 編譯快取的討論:
2.2. Gulp
2.3. Linter
2.4. 靜態型別(Typescript/Flow)
- TypeScript/wiki/Architectural-Overview" target="_blank" rel="nofollow,noindex">Typescript 總體架構 [英]
- 為什麼要在 JavaScript 中進行靜態型別檢查:
2.5. Babel
2.6. CSS預處理與模組化
3. 效能優化
效能優化其實就是在理解瀏覽器的基礎上“因地制宜”,因此可以配合1.3節“瀏覽器”部分進行理解。
強烈推薦把Google Web 上效能優化 Tab 中的文章都通讀一遍,其基本涵蓋了現代瀏覽器中效能優化的所有點,非常系統。下面也摘錄了其中一些個人認為非常不錯的篇幅。
3.1. 載入效能
- PRPL 模式 [英]
- 圖片懶載入完全指南 [英]
- 使用 Intersection Observer 來懶載入圖片 [英]
- 圖片與視訊懶載入的詳細指南 [英]
- 使用 Application Shell 架構來實現秒開應用 [英]
3.2. 執行時效能
- 避免大型、複雜的佈局和佈局抖動 [英]
- 什麼導致強制同步佈局(reflow)? [英]
- 如何診斷強制同步佈局 [英]
- 無線效能優化:Composite
- 如何不擇手段提升scroll事件的效能
- 使用 passive event listener 來提高滾動流暢性 [英]
- 節流和去抖(throttle & debounce):
-
requestIdleCallback - 一個強大而神器的 API:
- requestIdleCallback使用入門 [英]
- Idle Until Urgent [英] :requestIdleCallback的妙用
3.3. 前端快取
- Web 快取簡介:以購買牛奶的為例 [英]
- 大話前端快取 [英]
- 快取(一)—— 快取總覽:從效能優化的角度看快取
- 快取(二)—— 瀏覽器快取機制:強快取、協商快取
- 快取(三)—— 資料儲存:cookie、Storage、indexedDB
3.4. 效能除錯與實踐
- 使用 Chrome DevTools 提升頁面速度 [英] :Chrome DevTools實操講解
- 瞭解 DevTools 中的 Resource Timing
- 淘寶新勢力周H5效能優化實戰
- 優化打包策略來提升頁面載入速度
- Chrome DevTools 中你可能不知道的除錯技巧
- 前端效能測量 [英]
3.5. 效能指標
- 以使用者為中心的前端效能指標 [英] :前端效能指標的來龍去脈
- DOMContentLoaded:
- FP (First Paint):
- FCP (First Contentful Paint):
-
FMP (First Meaningful Paint):
- Chrome 中的 First Meaningful Paint
- QttKT-JK8HI/view?hl=zh-cn#heading=h.k50nnyhtptq0" target="_blank" rel="nofollow,noindex">Time to First Meaningful Paint
- TTI (Time to interactive):
- TTFB (Time To First Byte):
- FID (First Input Delay):
-
Speed Index:
- WebPagetest: Speed Index
4. 安全
很多安全風險老生常談,但是往往到出現問題時,才會被重視或者意識到。
4.1. XSS
4.2. CSRF
- 如何防止CSRF攻擊?
- Site Isolation [英] :Chrome的新特性
4.3. CSP
- Content Security Policy 入門教程
- HTTP/CSP" target="_blank" rel="nofollow,noindex">Content Security Policy (CSP) [英]
4.4. HTTPS
4.5. 安全實錄
-
About
rel=noopener
[英] :開啟一個新頁面是如何帶來安全隱患的 - 一種新型的“釣魚”方式 [英]
- 一個媒體檔案請求引發的跨站風險 [英]
- Mitigating Spectre [英] : Chrome 中的跨站安全問題
5. 自動化測試
自動化測試是軟體工程的重要部分之一,但卻極容易被忽視。
5.1. 單元測試
5.2. 端到端測試 (E2E)
5.3. 其他
6. 框架與類庫
如果說基礎知識是道,那框架與工具可能就是術;學習與理解它們,但千萬不要成為它們的奴隸。
6.1. React
- React 底層揭祕 [英]
- 你所需要知道的 React 細節
- React Fiber 架構
- React 16 Fiber 原始碼速覽
- React 是怎樣煉成的 :React早期的進化之路
- 從零開始實現一個React:
- 「react技術棧」單頁應用實踐快速入門
6.2. Vue
6.3. Redux
- 重新設計 Redux [英] :Rematch
- 如何用 GraphQL 來替代 Redux [英]
- 解讀 Redux 的設計思路與用法
- (Redux)應用構建的三個原則 [英]
6.4. RxJS
- ReactiveX 官網 :寶石圖真的非常形象易讀
- 響應式程式設計,是明智的選擇
- 圖解RxJS [英]
- 除錯RxJS:Tooling [英]
- 除錯RxJS:Logging [英]
7. 新技術/方向
前端領域新技術、新方向層出不窮,這裡彙總一些新技術方向;作為開發者需要多瞭解但是不要盲從
7.1. PWA
- PWA 學習與實踐系列
- Service Worker 入門簡介 [英]
- PWA 在 iOS 平臺上的特殊問題 [英]
- 在你的 PWA 中小心使用 iOS 的 meta 標籤 [英]
- 餓了麼的 PWA 升級實踐
- 離線指南
- Android 中的 WebAPKs [英]
- Pinterest_Engineering/a-one-year-pwa-retrospective-f4a2f4129e05" target="_blank" rel="nofollow,noindex">Pinterest 的 PWA 實踐 [英]
- 非同步 HTTP Cookies API [英] :賦能Service Worker
7.2. CSS Houdini
7.3. Web Components
- Web Components 基本概念和用法
- Web Components 指南 [英]
- Shadow DOM 使用簡介
- HTMLUnknownElement 與 HTML5 自定義元素的故事
7.4. 微前端(Micro Frontends)
7.5. HTTP/2
7.6. WebAssembly
- WebAssembly 官網
- WebAssembly 現狀與實戰
- WebAssembly 系列:
8. 業務相關
在業務中往往還有一些與“業務無關”的場景需求 —— 不論是什麼業務幾乎都會遇到;因此,在變與不變中,我們更需要去抽象出這些問題。