Skip to main content

技术选型

技术选型是项目的地基决策,选错了后期改造成本极高。原则:业务为出发点,而不是为了用新技术而用。

子章节导航

本章节包含以下内容,建议按顺序阅读:

  1. 页面渲染模式(强烈推荐先看)— 选型决策里权重最大的一环,决定框架、部署、SEO 策略
  2. 技术调研 — 如何做一份合格的技术调研
  3. 方案设计 — 如何写一份完整的项目方案设计文档

选型清单

  • 框架:React / Vue / ...
  • 语言:TypeScript(强推) / JavaScript
  • 构建工具:Vite / webpack5 / ...
  • 包管理器:pnpm / yarn / npm
  • 路由:react-router v6 / vue-router v4
  • 状态管理:Redux / MobX / Zustand / Pinia
  • UI 库:Ant Design / Element Plus / ...
  • 请求库:axios + 二次封装
  • 工具库:lodash / ahooks / ...
  • 样式方案:less + css module / styled-components
  • 代码规范:ESLint + Prettier + Stylelint
  • 提交规范:Husky + lint-staged + Commitlint
  • 测试:Jest + React Testing Library
  • CI/CD:GitHub Actions / Jenkins

一、选型考虑维度

维度关注点
团队人力成本、上手成本、现有技术栈储备
业务SEO、性能、跨端、交互复杂度
生态社区活跃度、第三方库丰富度、招聘市场
兼容浏览器/Node 版本、SSR/SSG、移动端
长期维护方稳定性(库是否还在维护)、迁移成本

小团队尽量统一技术栈,降低协作成本。选 1-2 个主语言、1 个 UI 库、1 个状态管理。

二、框架

框架是地基决策,后期迁移成本极高。

框架生态学习曲线适用
React最丰富(国内稍弱于 Vue)通用首选,海外项目 / 大型应用
Vue国内最丰富国内中小团队首选,上手快
Svelte极致性能、编译时优化
SolidJS接近 React 的开发体验 + 极致性能

选型建议:国内业务优先 Vue,中后台/海外优先 React。Svelte / SolidJS 是"小而美"的选择,生态和招聘是硬伤,慎用于生产。

三、渲染模式

完整内容请看 《页面渲染模式》——本节只放速查表,方便快速回忆。

模式渲染时机SEO首屏服务端压力部署复杂度一句话定位
CSR浏览器❌ 差❌ 慢(白屏)✅ 几乎为零✅ 极简(纯静态)反 SEO 的纯前端
SSR请求时✅ 好✅ 快❌ 高(每请求渲染)❌ 需 Node 运行时SEO + 实时数据双雄
SSG构建时✅ 极佳✅ 极快✅ 几乎为零✅ 极简(纯静态)部署最便宜的 SEO 方案
ISR构建时 + 按需再生✅ 好✅ 快🟡 低(仅失效时)🟡 需 Node 运行时SSG + SSR 的折中
RSC请求时✅ 好✅ 快🟡 中(仅 RSC 部分)🟡 需 Node 运行时数据密集型应用首选
Astro Islands构建时 + 按需 hydrate✅ 极佳✅ 极快✅ 几乎为零✅ 极简(纯静态)文档+工具混搭站首选

容易混淆的两个概念

  • SPA(Single-Page Application)是架构形态,整个应用只有 1 个 HTML,靠前端路由切换
  • CSR/SSG/SSR渲染模式,判断首屏 HTML 怎么生成
  • 二者正交:Next.js 用了 next/link 是「SPA 体验 + SSG/SSR 渲染」的典型例子

详细对比、MPA vs SPA 概念澄清、6 种模式优缺点分析 → 跳转 页面渲染模式 全文。

四、构建工具

工具语言适用特点
ViteGo (dev) + Rollup (prod)新项目首选启动 < 1s、原生 ESM
webpack 5JS老项目、大型工程生态最丰富、配置复杂
RollupJS类库开发产物干净、tree-shaking 友好
esbuildGo速度敏感场景极快但 API 简单
SWCRust替换 babel/tsc速度比 babel 快 5~10x
TurbopackRustNext.js 生态还在迭代中
RspackRustwebpack 替代API 兼容 webpack,迁移成本低

选型建议:新项目 → Vite已有 webpack 项目保持 + 局部 swc 加速类库 → Rollup

四、状态管理

方案适用特点
Context简单全局、主题、localeReact 原生,性能一般
Redux大型、复杂业务、需时间旅行模板代码多、生态完备
MobX响应式偏好、OOP 风格代码少、基于 Proxy 自动追踪
Zustand中小型项目轻量、hooks 风格、3KB
Jotai原子化状态适合细粒度更新
Valtio简化 MobXProxy + immutable
XState复杂状态机状态可视化、测试友好

现代项目首选 Zustand / Jotai,复杂业务再用 Redux/MobX。

五、UI 组件库

框架主流 UI 库
ReactAnt Design、Material UI、Chakra UI、shadcn/ui
VueElement Plus、Naive UI、Ant Design Vue
跨端TDesign(腾讯)、Arco Design(字节)

按需引入:babel-plugin-importunplugin-vue-componentsvite-plugin-style-import

六、微前端

方案特点适用
iframe隔离最彻底嵌入式页面、老系统迁移
single-spa最早的微前端框架学习成本略高
qiankun基于 single-spa,国内最流行多技术栈共存
Module Federationwebpack5 原生构建期共享模块
micro-app / wujie基于 web components接入简单、京东方案
Vite Plugin FederationVite 生态现代化选择

与 npm 包区别:npm 包是编译时共享(强耦合、性能最优),MF 是运行时共享模块(独立发版、配置复杂),微前端框架是整应用级运行时隔离(完全异构、基础设施重)。优先用 npm 私有包 / monorepo,有独立部署诉求再上 MF,最后才考虑微前端框架

七、其他

类型系统

  • TypeScript:现代前端必备

包管理

  • pnpm:推荐,节省磁盘、安装快
  • yarn / npm:兼容性好

跨端

  • React Native / Expo:移动端
  • Flutter:移动端
  • Taro / uni-app:国内小程序
  • Electron / Tauri:桌面端
  • PWA:轻量级移动端方案

八、选型 checklist

  • 业务场景是否真的需要这个技术?(KISS 原则)
  • 团队有足够的学习时间吗?
  • 社区活跃、最近一次发版在 6 个月内?
  • 性能数据是否有 benchmark 支撑?
  • 退出成本如何?是否容易迁移?

九、面试高频

  • Q:为什么选 Vite 而不是 webpack? A:Vite 利用浏览器原生 ESM,开发时按需编译,启动 < 1s;生产用 Rollup 产物质量有保障。webpack 配置生态成熟,但启动慢。
  • Q:什么时候用 Redux,什么时候用 Zustand? A:多人协作的大型项目、复杂异步流、需要时间旅行调试 → Redux;中小项目、追求简洁 → Zustand。Redux 模板代码多,新项目不建议直接上。
  • Q:微前端的代价? A:基础设施成本(qiankun、Module Federation 都需要改构建)、调试复杂度上升、版本管理混乱。除非真的需要多团队独立交付,否则谨慎使用。

延伸阅读

  • 《页面渲染模式》 — 6 种主流渲染模式详解 + 框架对比 + 新项目选型决策树
  • 《技术调研》 — 如何做一份合格的技术调研(含背景、方案对比、结论模板)
  • 《方案设计》 — 如何写一份完整的项目方案设计文档(含需求分析、技术选型、排期模板)