CH4 · 瀏覽器平台 + WebAssembly 詳細 ROADMAP
計畫文件,不會被 Quartz 渲染。
回主 roadmap → frontend/ROADMAP.md
章節目標
瀏覽器是前端真正的運行時平台。建立完整的平台知識:從 DOM/BOM 到 Web Workers、從 Storage 到 PWA、從 WebSocket 到 WebRTC、從 History API 到 WebAssembly 與 WebGPU。讓讀者不只是「用框架寫 UI」,而是真的會駕馭瀏覽器提供的所有能力。
🌱 基本介紹
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 01 | 瀏覽器如何運作 | ⛔️ fundamentals/browser-mechanism | 🌿 | 已有(跨系列) |
| 02 | DOM | ⛔️ fundamentals/dom | 🌿 | 已有(跨系列) |
| 03 | BOM | ⛔️ fundamentals/bom | 🌿 | 已有(跨系列) |
| 04 | 請求流程 | ⛔️ fundamentals/browser-request-flow | 🌿 | 已有(跨系列) |
| 05 | Render Pipeline(渲染管線) | 05-render-pipeline | 🌱 | Parse HTML → DOM tree、CSSOM → Render tree → Layout → Paint → Composite、60fps 的 16.67ms 預算 |
❓ 為什麼需要
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 06 | 為什麼需要 Web Workers(為什麼不能都在主線程) | 06-why-web-workers | 🌱 | JS 單線程、長運算會卡 UI、60fps 只有 16.67ms、運算型 task(影像處理、大資料解析、加密)需要 offload、主線程阻塞的實際症狀 |
| 07 | 為什麼需要 Service Workers(PWA 解了什麼) | 07-why-service-workers | 🌱 | 離線體驗、網路不穩的使用者、推播通知、攔截 fetch 做快取策略、PWA 基礎能力、為什麼 AppCache 被棄 |
| 08 | 為什麼需要 Web Storage(Cookie 不夠嗎) | 08-why-web-storage | 🌱 | Cookie 每次 HTTP request 都跟著送、容量限制 4KB、安全性顧慮、localStorage / IndexedDB 各自解的問題 |
| 09 | 為什麼需要 WebAssembly(JS 不能做到嗎) | 09-why-webassembly | 🌱 | JS 在 CPU-heavy 任務的極限、3D / 影像 / 加密 / AI 模型的需求、帶進 Rust/C++/Go 生態、near-native 效能、為什麼前幾年不熱、為什麼 AI 時代回歸 |
| 10 | 為什麼需要 WebSocket / SSE(HTTP 不夠嗎) | 10-why-realtime | 🌱 | HTTP 請求-回應模型的限制、polling 的代價、即時通訊 / 通知 / 協作需求、WebSocket vs SSE 各自解什麼 |
🕰️ 演進
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 11 | 儲存 API 演進 | 11-storage-evolution | 🌱 | Cookie → localStorage → IndexedDB → Cache Storage → OPFS,每個解決前一個的什麼問題 |
| 12 | 離線能力演進 | 12-offline-evolution | 🌱 | AppCache(棄用)→ Service Worker → PWA → Local-first(CRDT、Yjs) |
| 13 | 即時通訊演進 | 13-realtime-evolution | 🌱 | Long polling → Comet → WebSocket → SSE → WebRTC → WebTransport |
| 14 | 瀏覽器引擎演進 | 14-browser-engine-evolution | 🌱 | Trident(IE)→ Blink(Chrome/Edge)→ WebKit(Safari)→ Gecko(Firefox),合併與分裂的歷史 |
| 15 | 跨瀏覽器相容性演進 | 15-cross-browser-evolution | 🌱 | IE 時代 → polyfill 時代 → Evergreen browsers → Baseline 概念(2023)、能不能再砍掉 polyfill 了 |
🧠 知識型
儲存
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 16 | Cookie | 16-cookie | 🌱 | 屬性(Secure / HttpOnly / SameSite / Domain / Path)、用途、限制 |
| 17 | localStorage / sessionStorage | 17-web-storage | 🌱 | 5MB 限制、同源、tab 分享差異、同步 API 的代價 |
| 18 | IndexedDB | 18-indexeddb | 🌱 | NoSQL on browser、transaction、index、promise wrapper(idb) |
| 19 | Cache Storage | 19-cache-storage | 🌱 | Service Worker 的快取容器、策略(stale-while-revalidate) |
| 20 | OPFS(Origin Private File System) | 20-opfs | 🌱 | 2023+ 新,瀏覽器端檔案系統、適合 Wasm 大檔案 |
並發
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 21 | Web Workers | 21-web-workers | 🌱 | postMessage、worker 類型(Dedicated / Shared)、Comlink RPC |
| 22 | Service Workers 深入 | 22-service-workers | 🌱 | lifecycle(install / activate / fetch)、快取策略、推播 |
| 23 | SharedArrayBuffer / Atomics | 23-shared-memory | 🌱 | 跨 Worker 共享記憶體、COOP/COEP 限制、Wasm threading |
即時通訊
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 24 | WebSocket | ⛔️ fundamentals/websocket | 🌿 | 已有(跨系列) |
| 25 | Server-Sent Events | 25-sse | 🌱 | 單向 server → client、自動重連、EventSource API |
| 26 | WebRTC | 26-webrtc | 🌱 | P2P、音視訊、DataChannel、ICE/STUN/TURN 概念 |
| 27 | WebTransport | 27-webtransport | 🌱 | HTTP/3 over QUIC、低延遲串流、取代 WebSocket? |
路由與歷史
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 28 | History API | 28-history-api | 🌱 | pushState / replaceState / popstate、SPA 路由基礎、scroll restoration |
Device APIs
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 29 | Geolocation API | 29-geolocation | 🌱 | 精度 vs 耗電、權限處理、watchPosition |
| 30 | Notifications API | 30-notifications | 🌱 | 桌面通知、權限、搭配 Service Worker 推播 |
| 31 | Fullscreen API | 31-fullscreen | 🌱 | requestFullscreen、CSS :fullscreen |
| 32 | Screen Orientation / Wake Lock / Vibration / Battery | 32-device-misc | 🌱 | 行動裝置相關 API 合輯、各自用途、支援度 |
| 33 | Clipboard API | 33-clipboard | 🌱 | navigator.clipboard、安全限制(secure context)、跟 CH1 Drag&Drop 連動 |
| 34 | File System Access API | 34-file-system-access | 🌱 | 讀寫本地檔案、適合 editor 類應用、跟 OPFS 的差異 |
| 35 | Web Share API | 35-web-share | 🌱 | 原生分享選單、行動裝置原生整合 |
可觀察性
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 36 | Intersection Observer | 36-intersection-observer | 🌱 | lazy load、infinite scroll、進出視窗偵測 |
| 37 | Mutation Observer | 37-mutation-observer | 🌱 | 監視 DOM 變化、取代 deprecated Mutation Events |
| 38 | Resize Observer | 38-resize-observer | 🌱 | 元素尺寸變化(比 window.onresize 精準) |
| 39 | Performance Observer | 39-performance-observer | 🌱 | Long Task、paint timing、CLS、LCP 指標收集 |
頁面生命週期
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 40 | 原生 Lifecycle API | 40-page-lifecycle | 🌱 | DOMContentLoaded / load / beforeunload / pagehide / pageshow / visibilitychange / freeze / resume / online / offline / storage event、每個何時觸發 |
新平台能力
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 41 | WebAssembly 基礎 | 41-wasm-basics | 🌱 | .wasm 二進位、JS 整合(instantiate)、記憶體模型、wasm-bindgen |
| 42 | WebAssembly 實戰 | 42-wasm-practice | 🌱 | Rust 編譯到 Wasm、跑 Python(Pyodide)、跑 AI 模型(transformers.js / ONNX runtime web) |
| 43 | WebGPU | 43-webgpu | 🌱 | 取代 WebGL、GPU 運算(不只繪圖)、跟 AI 推論連動 |
| 44 | WebXR | 44-webxr | 🌱 | VR/AR on browser、Vision Pro 相容 |
| 45 | WebCodecs / WebTransport 串流進階 | 45-webcodecs | 🌱 | 音視訊原生 codec、low-latency streaming |
🔧 小實作注意事項
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 46 | 離線優先 PWA 實作 | 46-offline-pwa | 🌱 | Service Worker + Cache Storage + manifest.json 完整流程 |
| 47 | 儲存選型實戰 | 47-storage-selection | 🌱 | Cookie vs localStorage vs IndexedDB vs OPFS 實戰決策樹 |
| 48 | WebSocket 斷線重連策略 | 48-websocket-reconnect | 🌱 | exponential backoff、heartbeat、message queue、order guarantee |
| 49 | 頁面可見性切換處理 | 49-visibility-handling | 🌱 | 省電暫停計時器、被背景化時保存狀態、freeze/resume 回應 |
| 50 | 跨 Tab 通訊 | 50-cross-tab-communication | 🌱 | BroadcastChannel / MessageChannel / SharedWorker / storage event 四種方案 |
| 51 | Wasm 整合 JS 實戰 | 51-wasm-integration | 🌱 | 從 Rust 專案到可用 npm package、wasm-pack、效能考量 |
| 52 | 跑 AI 模型在瀏覽器 | 52-browser-ai | 🌱 | transformers.js、WebGPU 加速、ONNX Runtime Web、隱私優勢 |
💣 Anti-pattern
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 53 | 瀏覽器 API Anti-patterns | 53-browser-api-anti-patterns | 🌱 | 大資料放 localStorage、同步 API 卡主線程、忘記權限 UX、濫用 beforeunload、Service Worker 快取不清 |
🧰 對應檢查工具
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 54 | 瀏覽器平台檢查工具 | 54-browser-tooling | 🌱 | Can I Use、Web.dev Baseline、Chrome Platform Status、Lighthouse PWA audit |
📎 補充(niche / 進階 / 冷門但值得記錄)
| # | 主題 | Slug | Stage | 大綱 |
|---|
| S01 | Payment Request API | s01-payment-request | 🌱 | 瀏覽器原生付款介面、Apple Pay / Google Pay 整合 |
| S02 | Background Sync / Periodic Background Sync | s02-background-sync | 🌱 | Service Worker 的定時 / 斷網重試機制 |
| S03 | Credential Management API + Passkeys | s03-passkeys | 🌱 | WebAuthn、Passkey 無密碼登入、跟 CH11 資安連動 |
| S04 | WebUSB / WebBluetooth / Web Serial / WebHID | s04-web-hardware | 🌱 | 硬體連接家族、IoT 應用、安全限制 |
| S05 | Contact Picker API | s05-contact-picker | 🌱 | 行動裝置讀通訊錄、權限 UX |
| S06 | Idle Detection API | s06-idle-detection | 🌱 | 偵測使用者閒置、chat presence 類應用 |
| S07 | Ambient Light / Gyroscope / Accelerometer | s07-sensors | 🌱 | 環境光與運動感測器、遊戲 / AR 應用 |
| S08 | Local Fonts Access API | s08-local-fonts | 🌱 | 讀系統字型(需授權)、設計工具類應用 |
| S09 | Broadcast Channel API | s09-broadcast-channel | 🌱 | 跨 tab 同源通訊(已在 50 跨 Tab 通訊提過,這裡是獨立深入) |
章節進度統計
- 知識主題:54 + 9 補充 = 63 項
- 🌿 growing:5(跨系列)
- 🌱 seed:58
跨系列連結
- →
frontend/html/ CH1(Canvas / Web Components、媒體標籤)
- →
frontend/js/ CH3(Event Loop、async、Promise)
- →
frontend/framework/ CH6(SSR / RSC 用到 Service Worker / Streaming)
- →
frontend/security/ CH11(CSP、COOP/COEP、secure context)
- →
frontend/engineering/ CH9 F11(效能觀測對接 Performance Observer)
- → W01 walkthroughs(SPA 路由用 History API)
- → W05 CMS capstone(儲存、即時協作用 WebSocket、Wasm 加密)