前端进阶篇 · 第二册

第一册你已经能写组件了,这一册解决的是真实项目里的下一层问题:页面跳来跳去怎么做路由、全局状态放哪、数据怎么缓存、页面要 SEO 怎么办、怎么把 Web 包成桌面 App、怎么接大模型、怎么把性能调到 100 分、最后怎么上线。版本基线:React 19 / Vite 6 / Next.js 15 / Tauri 2.0 / Electron 最新 / Vercel AI SDK。

1
最新版本与兼容性速查表
Version Baseline · 2024 底—2025 现役技术栈

前端生态半年不逛就像隔了三年。下面这张表是本册的版本基线:写代码前对一眼,别照着 2022 年的老教程 import 一堆早就改了名的包。版本号会一直往前走,遇到新版本先去官网读 …

进入本节 →
2
第 1 章 React 生态:路由、状态、数据、UI
React Router / Zustand / TanStack Query / shadcn/ui

React 本身只管"画组件",真实项目还需要一堆周边:路由(URL 变了换页面)、状态管理(跨组件共享数据)、数据请求(带缓存的 fetch)、UI 组件库(别自己造轮子)。这一…

进入本节 →
3
第 1.5 章 Vue 3 完整教程
Vue 3 · Composition API · Pinia · Vue Router 4

Vue 是渐进式 JavaScript 框架:易学易用、响应式驱动、中国社区强大,文档中文质量极高。React 教你"用 JS 写 UI",Vue 教你"用增强版 HTML 写应用…

进入本节 →
4
第 1.6 章 Svelte 5 与 SolidJS:编译时与细粒度响应式
Svelte 5 Runes · SolidJS

React/Vue 都是"运行时框架"——运行时还要跑虚拟 DOM diff。Svelte 和 SolidJS 换个思路:编译时把代码编译成直接操作 DOM 的代码,没有虚拟 DO…

进入本节 →
5
第 2 章 SSR 与全栈:Next.js 15/16
Next.js 15 — App Router, Server Components

纯 SPA(Create React App / Vite)有两个毛病:① 首屏白屏——浏览器要先下 JS,再执行,再画 DOM,慢;② SEO 差——爬虫看到的是一个空 div。…

进入本节 →
6
第 3 章 Tauri 2.0:用 Web 技术写桌面 App
Tauri 2.0 — Rust Backend + WebView Frontend

想做一个桌面应用,但不想学 Swift/Kotlin/Qt?用你已经会的 HTML/CSS/JS 写 UI,Rust 写后端能力,Tauri 帮你打包成 Windows/macOS…

进入本节 →
7
第 4 章 Electron:老牌桌面方案
Electron — Chromium + Node.js

VS Code、Slack、Discord、Figma 都是 Electron 写的。它的思路是把 Chromium 和 Node.js 一起打包,你用纯 Web 技术写 UI,还…

进入本节 →
8
第 5 章 前后端 × AI 协同:接大模型
Vercel AI SDK, Streaming, Function Calling

2024 年以后,前端的新标配是接大模型。聊天界面、AI 搜索、文档总结、代码助手——本质都是调 AI API + 流式输出 + 工具调用。这一章讲怎么在 React 里把这事做好…

进入本节 →
9
第 6 章 性能优化:让页面快到飞起
Web Vitals, Loading, Runtime, Memory

Google 给了三个硬性指标叫 Core Web Vitals,直接影响 SEO 和转化率:LCP(最大内容绘制 < 2.5s)、INP(交互到下次绘制 < 200m…

进入本节 →
10
第 7 章 部署与运维:把网站推上线
Vercel / Nginx / Docker / CI-CD

代码写完了,怎么让全世界访问?静态文件扔 CDN,前后端框架用 Vercel,自托管用 Nginx,要环境隔离用 Docker。这一章把主流路线过一遍。

进入本节 →
11
第 8 章 进阶路线、安全与面试
Architecture, Security, Interview

后端转前端面试,常被问这几个:闭包(是什么、有啥用、内存泄漏)、原型链(__proto__ 和 prototype 关系)、this 指向、事件循环(宏任务微任务顺序)、Promi…

进入本节 →
12
微前端与 Module Federation:让多个团队独立发布
Micro Frontends · Webpack 5 Module Federation / qiankun / vite-plugin-federation

微前端是一个非常容易被"用错"的技术。它解决的核心问题只有一个:当一个前端应用大到几个团队同时改、天天互相阻塞、发布要排队协调的时候,怎么让每个团队独立开发、独立部署。注意,它不解…

进入本节 →
13
React Server Components 与 Streaming SSR
RSC · Server / Client Boundary · Suspense Streaming · Server Actions

Server Components 是 React 近十年最大的一次模型变化,也是被误解最多的一次。它要解决的核心问题有两个:一是把"只为了取数据而写的组件"从客户端 bundle…

进入本节 →
14
前端测试与组件文档:从 "不敢改" 到 "随手改"
Frontend Testing · Vitest / Testing Library / MSW / Playwright / Storybook

前端代码有一个特殊性质:类型系统能保证"传参对了",但保证不了"用户点上去会发生什么"。一个按钮的 onClick 绑错了函数、一个 loading 状态忘了置回 false、一个…

进入本节 →
坑

常见坑汇总 + 自测

Common Pitfalls & Self-Check
两册学完还会踩的坑

React:useEffect 依赖数组漏写、state 直接 push、列表 key 用 index、把函数传给子组件不 memo 导致无限重渲染。

工程化:API Key 提交进 Git、node_modules 提交进 Git(必须 .gitignore)、锁文件不提交。

跨端:Electron 忘了开 contextIsolation;Tauri 权限没配导致前端调命令被拒。

AI:API Key 放前端、流式输出没处理 AbortController、没做输入长度限制被刷爆账单。

性能:过早优化(先测量)、长列表不虚拟、定时器不清理。

自测题(点开看答案)

1. Tauri 和 Electron 最核心的区别是什么?为什么 Tauri 包体小很多?

看答案

Electron 自带 Chromium,每个 App 都要打包一份浏览器(~100MB+)。Tauri 用操作系统自带的 WebView(macOS WKWebView / Windows WebView2),后端是 Rust 编译出的小二进制,所以包体只有几 MB。代价是不同系统 WebView 版本不一,要测兼容性。

2. 为什么前端不能直接把 OpenAI API Key 写在代码里?

看答案

前端代码最终会发到用户浏览器,按 F12 全可见。任何人都能拿走你的 Key 去刷你的账单。正确做法是:Key 放后端环境变量,前端只调自己后端的 /api/chat,后端再转发给 OpenAI,并加鉴权和速率限制。

3. Next.js 的 Server Components 和 Client Components 怎么区分?什么时候用 "use client"?

看答案

Next.js App Router 默认所有组件是 Server Components,在服务端跑,能直接查数据库、不下发到浏览器。只要用了 useState / useEffect / 事件监听 / 浏览器 API(window/document),就必须在文件顶部加 "use client" 标记成客户端组件。

4. Core Web Vitals 是哪三个指标?合格线分别是多少?

看答案

LCP 最大内容绘制 < 2.5 秒;INP 交互到下次绘制 < 200 毫秒;CLS 累积布局偏移 < 0.1。Google 用这三个衡量用户体验,直接影响 SEO 排名。

5. XSS 和 CSRF 分别是什么?最简单的防御手段?

看答案

XSS:攻击者在页面注入恶意脚本。React 默认转义 + 加 CSP + Cookie HttpOnly 可防。CSRF:攻击者借用户登录态偷发请求。用 CSRF Token + Cookie SameSite=Lax/Strict 可防。


综合实战题(跨章,点开看思路)

练 1. 老板说"这个列表页太卡了,1000 条数据滚起来掉帧",你怎么排查和优化?

看思路

先测量别急着改。Performance 面板录一次滚动看长任务在哪。多半是 1000 行 DOM 节点每次滚动都重排——上虚拟列表(@tanstack/react-virtual)只渲染可视区;列表项用 React.memo 包;动画走 transform;事件监听节流。若数据本身是从后端拉的大列表,考虑后端分页/虚拟滚动配合。

练 2. 用 Next.js 15 写一个博客系统,文章详情页要 SEO 好、又要登录后才能看评论,怎么设计组件边界?

看思路

文章正文放服务端组件(async/await 查库,直接出 HTML,SEO 好、零 JS);评论区是交互的,单独做一个客户端组件("use client")嵌在服务端组件里。列表页 SSG/ISR 静态生成 + revalidate;Server Actions 处理提交评论,写完 revalidatePath 刷新。评论鉴权在服务端组件/cookies() 里判断,别在客户端藏。

练 3. 要把一个内部工具做成桌面 App,团队纯 JS 背景、又很在意安装包大小,选 Tauri 还是 Electron?为什么?

看思路

在意包体选 Tauri(3-10MB vs 100MB+),但团队要学一点 Rust 写命令、配 capabilities 权限。纯 JS 团队、要最大 Chromium 兼容性和成熟生态选 Electron,但守好 contextIsolation/nodeIntegration/sandbox 三条安全线。这个场景"在意包体"权重最高,先 Tauri;Rust 学习成本用命令封装 + 官方插件生态摊薄。

练 4. 接了一个 AI 聊天功能,上线后用户反馈"每次点发送都要等 3 秒才出字",怎么改?

看思路

3 秒是在等模型一次性返回完整答案。改成流式:后端用 streamText 走 SSE,前端读 ReadableStream 逐 token 拼到当前消息,首字几百毫秒就出来,体感从"卡 3 秒"变"打字机"。同时把 API Key 放后端、前端只调自己 /api/chat,加 loading 态和停止按钮。

练 5. 项目部署到 Nginx 后,用户反馈"刷新首页正常,刷新 /dashboard 子路由就 404",怎么修?

看思路

history 模式路由是前端路由,服务器不认识 /dashboard。Nginx 配 try_files $uri $uri/ /index.html,把所有未命中的路径都回退到入口 HTML,交给前端路由。同时确认 API 路径(/api/)被反代到后端、没被回退规则吃掉。