Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

前端框架对比

框架全景

前端框架
├── 元框架 (Meta Framework)
│   ├── Next.js (React)
│   ├── Nuxt (Vue)
│   ├── SvelteKit (Svelte)
│   ├── Angular (Angular)
│   └── Remix (React)
├── UI 框架
│   ├── React
│   ├── Vue
│   ├── Svelte
│   ├── Angular
│   └── SolidJS
└── 跨平台
    ├── React Native
    ├── Flutter
    └── Tauri

核心 UI 框架

React

维度说明
公司Meta (Facebook)
首发2013
语言JSX (JavaScript + XML)
状态管理useState / useReducer / Zustand / Jotai / Redux
渲染方式虚拟 DOM → Diff → 真实 DOM
学习曲线中等(Hooks 概念需理解)
生态系统最大(npm 周下载量最高)

核心理念

  • 组件化:一切皆组件
  • 单向数据流:Props 向下,Events 向上
  • 声明式:描述 “是什么”,不是 “怎么做”

代码示例

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <button onClick={() => setCount(c => c + 1)}>
      Count: {count}
    </button>
  );
}

Vue

维度说明
作者尤雨溪 (Evan You)
首发2014 (Vue 3: 2020)
语言SFC (Single File Component, <template> + <script> + <style>)
状态管理ref / reactive / Pinia
渲染方式编译时优化 + 虚拟 DOM
学习曲线低(模板语法直观)
生态系统大(国内占比极高)

核心理念

  • 渐进式:可以从 CDN 引入,也可以用完整构建工具链
  • 双向数据流:v-model 简化表单绑定
  • 组合式 API:Vue 3 Composition API 对标 React Hooks

代码示例

<script setup>
import { ref } from 'vue';
const count = ref(0);
</script>

<template>
  <button @click="count++">Count: {{ count }}</button>
</template>

Svelte

维度说明
作者Rich Harris
首发2016 (Svelte 5: 2024)
语言类 HTML + JS
状态管理Svelte 5 Runes ($state / $derived / $effect)
渲染方式编译时转换(无虚拟 DOM)
学习曲线极低(几乎就是增强版 HTML)
生态系统小但增长快

核心理念

  • 编译时框架:构建时将组件编译为原生 DOM 操作
  • 无运行时:无虚拟 DOM、无 diff 算法开销
  • 代码即框架:框架在编译时消失

代码示例

<script>
  let count = $state(0);
</script>

<button onclick={() => count++}>Count: {count}</button>

Angular

维度说明
公司Google
首发2016 (Angular 2+,重写)
语言TypeScript(强制)
状态管理RxJS / Signals(19+)
渲染方式增量 DOM + 变更检测
学习曲线高(依赖注入、模块、装饰器)
生态系统大(企业级首选)

核心理念

  • 全家桶:框架内置路由、表单、HTTP、测试
  • 依赖注入:一等公民
  • TypeScript 优先:类型安全是强制的

代码示例

@Component({
  selector: 'app-counter',
  template: `<button (click)="count++">Count: {{ count }}</button>`
})
export class CounterComponent {
  count = 0;
}

SolidJS

维度说明
作者Ryan Carniato
首发2021
语言JSX
状态管理createSignal / createMemo / createEffect
渲染方式真实 DOM + 细粒度响应式(无虚拟 DOM)
学习曲线低(React 开发者几乎无学习成本)
生态系统

核心理念

  • React 语法 + 真实 DOM:像 React 写,但不走 diff
  • 细粒度更新:信号(Signal)级别的精确更新
  • 无重渲染:组件函数只执行一次

元框架 (Meta Framework)

特性Next.jsNuxtSvelteKitRemixAngular Universal
基础框架ReactVueSvelteReactAngular
SSG
SSR
ISR✅ (Pages Router)
流式 SSR
边缘渲染✅ (Edge Runtime)
文件路由✅ App Router✅ (文件系统路由)
API Routes✅ (loader/action)
图片优化✅ (next/image)

选型建议

  • React 生态 → Next.js(最大、最多部署支持)
  • Vue 生态 → Nuxt(Vue 官方推荐)
  • 追求性能 → SvelteKit(编译时优势)
  • 侧重服务端逻辑 → Remix(Web 标准优先)

状态管理方案

React 生态

方案类型特点适用场景
useState内置简单、局部状态组件内状态
useReducer内置复杂状态逻辑表单、多步流程
Zustand轻量极简 API、无 Provider全局状态(推荐)
Jotai原子化类似 Recoil、细粒度大量独立状态
Redux Toolkit全功能最成熟、中间件丰富大型应用
TanStack Query服务端自动缓存、请求去重API 状态管理

Vue 生态

方案类型特点
ref / reactive内置响应式基础
Pinia官方Vue 3 官方状态管理,替代 Vuex
VueUse工具集300+ Composition Utilities

Svelte 生态

方案类型特点
$state内置 Runes编译时响应式
Svelte Store内置writable / readable / derived

CSS 方案

方案类型特点适用场景
Tailwind CSS原子化按需生成、设计系统约束推荐默认选择
CSS Modules局部作用域编译时类名隔离中小型项目
Styled ComponentsCSS-in-JS运行时、动态样式React 项目
EmotionCSS-in-JS类似 SC、性能更好React 项目
Panda CSS原子化 + 类型安全零运行时、类型推导需要类型安全
UnoCSS原子化引擎级、按需加载替代 Tailwind
Vanilla Extract零运行时TypeScript 编写样式类型安全
SCSS/Less预处理器变量、嵌套、mixin传统项目

选型建议

  • 新项目 → Tailwind CSS(行业标准、生态最全)
  • 需要类型安全 → Panda CSSVanilla Extract
  • 追求极致性能 → UnoCSS(引擎级,比 Tailwind 快)

性能对比

Bundle Size(框架核心)

框架压缩后大小说明
Svelte~2 KB编译时消失,运行时极小
SolidJS~7 KB轻量运行时
Vue 3~16 KB渐进式,按需引入
React~42 KB包含 React + ReactDOM
Angular~65 KB全家桶,按需引入

渲染性能(基准测试)

Svelte > Solid > Vue 3 > React > Angular
   ↑                      ↑         ↑
 编译时           虚拟DOM(优化)    变更检测

注意:实际应用性能差异远小于基准测试,框架选择对 99% 的应用不是性能瓶颈。


选型决策

场景?
├── 已有 React 经验 → Next.js(元框架)+ Zustand + Tailwind
├── 已有 Vue 经验 → Nuxt(元框架)+ Pinia + Tailwind
├── 追求极致性能 → SvelteKit + Tailwind
├── 企业级大型应用 → Angular + NgRx + Angular Material
├── 跨平台移动 → React Native 或 Flutter
├── 不确定 → Next.js(生态最大、招聘最容易)
└── 个人项目 → SvelteKit(开发体验最好)

按团队规模

规模推荐原因
1–3 人SvelteKit / Next.js快速开发
5–15 人Next.js / Nuxt生态成熟、招人容易
15+ 人Angular约束多但一致性好、TypeScript 强制
跨平台React Native / Flutter一套代码多端运行

新兴趋势

  1. Server Components:Next.js App Router、React Server Components 将渲染推向服务端,减少客户端 JS
  2. Signals:Angular 19+ Signals、Svelte 5 Runes、SolidJS Signals — 细粒度响应式成为主流
  3. 编译时优化:Svelte、SolidJS 证明编译时可以大幅减少运行时开销
  4. 边缘优先:Cloudflare Workers、Vercel Edge 让 SSR 推到 CDN 边缘
  5. AI 辅助开发:v0.dev (Vercel)、Bolt.new 等 AI 生成 UI 工具兴起

参考资料