这不是一篇怀旧的悼文。这是一场技术选择的重估。
你还记得那些年吗?CRA、Redux、微前端、CSS-in-JS 这些技术被推到了舞台中央。大厂们争相采用,创业公司以为找到了银弹,招聘页面上到处都写着"熟悉 Redux 和微前端架构优先"。
但现在,这些技术正在被重新审视。
不是因为它们没有价值,而是在实际应用中,它们承诺的收益往往被真实的成本所掩盖。有些问题被更轻量的方案解决得更好。2026 年的前端正在进行一次理性的反思:有时候,让开发者体验更好的工具,会无意中增加用户的使用负担。
五个正在衰落的技术选择
1. Create React App:从入门必选到逐渐被超越
2025年2月14日这天,React官方宣布了一个让无数开发者五味杂陈的决定——create-react-app 正式停止维护。
没有绚烂的告别,只有一句冷冰冰的通知:"create-react-app is deprecated. Please use modern React frameworks."
这个陪伴了9年的老伙计,曾经是 React 生态的入口。2016 年的时候,不用 CRA 搭建 React 项目,你得跟 Webpack 的配置文件斗智斗勇。CRA 出现后,一句create-react-app my-app,你就能写代码了。它就像一个心疼程序员的管家,帮你把繁琐的东西都收拾好。
但故事到这里就结束了。
2025 年之后,开发工具的世界变了:
Vite来了,开发服务器启动只需 4 秒(CRA 是 45 秒)
Next.js内置了 SSR、路由、优化,开箱即用
Turbopack在构建速度上吊打 Webpack
CRA 陷入了一个无法逃脱的困境:它想保持轻量级,但用户需要的功能越来越多;它想支持新的构建工具,但已经被 Webpack 绑定太深。到了 2026 年,没人愿意再等 8 分钟的构建时间,只为了一个过时的开发体验。
真实的迁移故事:某家电商公司从 CRA 迁移到 Vite 后:
开发服务器启动:45秒 → 4秒(快 11 倍)
完整构建时间:8分钟 → 90秒(快 5 倍)
团队开发效率提升 30%(少等待就是多生产力)
2. Redux:从状态管理之王到被轻量级方案超越
Redux 不是死了,它是被悄悄地放进了历史遗物馆。
还记得那些年 Redux 有多火吗?面试的时候,考官问你"你了解 Redux 中间件吗?"就像问你"你是真的程序员吗?"一样。但在 2026 年,Redux 已经从**"必备技能"** 沦落到**"了解就行,别当主力"**。
最直观的证据来自数据:
状态管理工具使用率变化 Zustand: 2023年 8% → 2026年 35% Redux: 2023年 60% → 2026年 38%为什么大家开始逃离 Redux?我问过很多团队,他们都给出了一样的答案:太重了。
这个"重"不是指代码包的大小,而是认知负担:
Redux 更新流程: User Action ↓ Dispatch Action ↓ Middleware 处理 ↓ Reducer 计算新状态 ↓ Store 更新 ↓ Selector 提取数据 ↓ Component 重新渲染七步才能完成一个状态更新。而 Zustand 呢?
Zustand 更新流程: User Action ↓ 调用 state 更新函数 ↓ Component 重新渲染只需两步。
更扎心的是性能数据:
指标 | Zustand | Redux |
|---|---|---|
状态更新延迟 | 35ms | 65ms |
内存开销 | 5% | 15% |
首屏加载时间 | +200ms | +400ms |
有个团队从 Redux 迁移到 Zustand,状态代码从 1500 行砍到了 700 行。最关键的是,新人上手从两周缩短到三天。你再想想,员工每月少搞两周的学习配置,一年公司能省多少钱?
但是,Redux 在什么时候还有价值呢?只有一种情况:超大型企业应用,有法规审计要求,多个团队需要统一的状态协议。比如某金融科技公司有 50 个工程师共享一个状态树,需要完整的日志追踪和回放能力。在这种情况下,Redux 的学习成本在公司整体效率面前,就不算什么了。
但问题是,90% 的应用都不是这样的。你的 SaaS 产品、内部系统、电商前端——它们都不需要 Redux。你用 Redux,就像用大炮打蚊子。
3. 微前端:从架构银弹到现实碰撞
微前端的故事,就像一个被吹过头的创业融资。投资人看到了 Spotify 和蚂蚁金服的成功案例,立刻掐指一算:"2025 年微前端会爆发!"
结果呢?采用率从 75% 骤降到 23%,而且还在继续下滑。
你知道为什么吗?因为微前端解决的问题,在大多数公司的场景里根本不存在。
微前端在理想国里是这样的:不同的团队、不同的技术栈、完全独立的部署。听起来很诱人,对吧?但现实中会发生什么?
问题 1:框架重复下载
假设你有三个微应用:
Team A 用 React 18.2
Team B 用 Vue 3.3
Team C 用 Svelte 4.0
用户访问你的应用,浏览器要下载:React (80KB) + Vue (35KB) + Svelte (15KB)。这叫什么?浪费。
如果都用 React,一个 React 库就搞定了。微前端反而让你的首屏加载多花 130KB 的流量。在 4G 网络下,那就是额外多等 2-3 秒。
问题 2:布局狱
页头是 Team A 的。导航是 Team B 的。内容是 Team C 的。现在产品说:"把导航改成深色主题"。你需要改动 Team B,重新部署,等待他们上线……然后发现用 CSS-in-JS 的样式冲突了。
一个简单的改动,变成了一场跨团队协调的噩梦。
问题 3:SEO 直接残废
微前端通常用 iFrame 加载子应用。搜索引擎爬虫进来一看:
<iframe src="https://sub-app.com/article"></iframe>完蛋,爬虫看不到你的实际内容。你精心写的 SEO 文案全部失效。
问题 4:性能代价
Module Federation 看起来很高级,但实际代价呢?
某公司用微前端后测下来:
指标对比(有微前端 vs 无微前端) 首屏加载时间: 2.1s → 2.8s(+33%) INP 指标: 150ms → 380ms(+153%) CLS 指标: 0.08 → 0.15(+87%)用户体验明显变差。
然后有个团队就把五个微应用合并成了一个 monorepo(模块化单体),用 Nx 管理不同的模块。结果:首屏降到 1.2 秒,构建还快了,部署也独立了。一箭三雕。
微前端现在的适用场景就一个:你的公司像 Spotify 那样有 200+ 个独立的 Web 应用,需要完全的技术栈隔离。其他情况下,模块化单体(modular monolith)才是正道。
4. CSS-in-JS:美好承诺遇上性能现实
让我讲个真实的故事。
2022 年,某家融资过亿的创业公司,他们的应用是 React + Emotion(CSS-in-JS 方案)。用户反馈说:"你们的产品太卡了,隔壁竞争对手明显快很多。"
工程师们开始排查。用 Chrome DevTools 的 Performance 标签录一下用户交互:
用户点击 → React 重新渲染 → Emotion 重新计算所有样式 → 主线程被锁定 → 总花费 450ms这就是 CSS-in-JS 的原罪:样式计算发生在 JavaScript 执行的主线程上。
具体来说,每次组件重新渲染,Emotion 都要做以下工作:
解析你写的 CSS 代码
处理动态值(颜色、大小等)
生成唯一的类名
注入到 style 标签
让浏览器重新计算样式
这整个过程,都在主线程上。你的 JavaScript 逻辑在等,用户的交互在等,动画在卡顿。
Reddit、CircleCI、Spot 这些公司最终都把 CSS-in-JS 砍掉了。Reddit 的工程师团队在做完迁移后,写了篇文章说:**从 Emotion 迁移到 Tailwind + CSS Modules,渲染性能提升了 28%**。
为什么提升这么明显?因为:
方案 | 执行时机 | 执行线程 | 性能影响 |
|---|---|---|---|
CSS-in-JS | 运行时 | 主线程 | 直接影响交互 |
Tailwind | 构建时 | 无 | 零运行时成本 |
CSS Modules | 编译时 | 无 | 零运行时成本 |
现在的最佳实践是:
主题系统:用 CSS Variables(原生 CSS 变量)
组件样式隔离:用 CSS Modules 或 BEM 命名
快速迭代:用 Tailwind(构建时生成,零运行时)
这样的组合,既保留了原来的便利性,又彻底避免了运行时性能问题。
5. 单体前端:团队增长的隐形成本
最后这个问题,很多小公司还没意识到,但大公司已经在为此付出代价。
单体前端架构就是:前端代码全在一个项目里,和后端代码在同一个 Monolith 中。听起来没问题,对吧?
但在实际运营中:
A 团队改了一个商品详情页的样式 ↓ 提交 PR,等待代码审查 ↓ CI/CD 运行 1000+ 个测试(包括不相关的模块) ↓ 构建时间 25 分钟 ↓ 测试通过,合并代码 ↓ 自动部署到生产环境 ↓ B 团队发现 checkout 流程坏了(某个共享的 utils 被改了) ↓ 发起紧急修复,回滚、Fix、重新部署 ↓ 用户在这 30 分钟内没法下单 ↓ 转身去了竞争对手这就是单体前端的日常。任何一个小改动,都可能波及整个系统。特别是当团队超过 20 人的时候,这种问题就会成倍增加。
而且,人员流动也受影响。新员工入职,要克隆一个 50GB 的仓库,装依赖要 20 分钟,第一次启动项目要 15 分钟。爽吗?不爽。
现代架构的解决方案是Monorepo + 模块化(使用 Nx 或 Turborepo):
前端项目结构: root/ ├── packages/ │ ├── common/ (共享组件、工具) │ ├── features-checkout/ (独立特性,由一个团队拥有) │ ├── features-products/ (独立特性,由另一个团队拥有) │ └── features-account/ (独立特性) ├── nx.json └── package.json 优势: 1. 各团队独立开发各自的特性模块 2. 构建系统只构建改动过的模块 3. 可以独立部署某个特性 4. 共享代码的变动会自动追踪依赖 5. 新员工可以只 clone 需要的模块某家电商公司用这个方法重构后,单次部署时间从 45 分钟降到 8 分钟,新员工入职的前置时间从 4 小时降到 30 分钟。
为什么这些技术一起倒下了?
看起来这些技术死于各种不同的原因,但如果你仔细看,它们全部犯了同一个错误:
错误 1:性能税
CRA 慢是因为 Webpack 的构建流程冗长。Redux 慢是因为它强制全量更新检查。微前端慢是因为需要加载多个框架和协调开销。CSS-in-JS 慢是因为样式计算占用主线程。
这些工具的共同特点就是向用户转嫁了开发的便利。开发者舒服了,用户的网站变卡了。
在互联网竞争日趋激烈的 2026 年,这笔账算不过来。**有公司因为采用了复杂的前端架构,导致首屏加载多花 2-3 秒,结果转化率下降了 28%**。一旦转化率下降,再牛逼的技术也没用。
错误 2:认知负担陷阱
这些技术都承诺让开发变简单,结果是让开发者的学习成本爆表。
Redux 的学习曲线是陡峭的。微前端需要你理解分布式系统。CSS-in-JS 需要你了解运行时的样式计算。
最终的结果是什么?
代码库变得只有少数人能维护
新人上手要花 2-4 周学习框架本身,而不是业务逻辑
Bug 出现时,调试成本翻倍
人员流动时,知识库流失
对比一下 Zustand 的学习成本:看 5 分钟的文档,写个例子,就能上手。对比 Tailwind:学习 20 个常用的 Utility Class,基本就能搞定 80% 的场景。
错误 3:忽视真实的用户指标
有多少团队,在选择技术的时候,问过这个问题:
"这个技术对真实用户的转化率、留存率、成本有什么影响?"
答案是:很少。
大多数团队的决策逻辑是:
这个技术很流行
招聘会更容易
面试题更好出
技术博客更好写
但用户不关心你用的是 Redux 还是 Zustand。用户只关心:你的网站为什么这么慢?为什么买个东西还卡顿?
某些转向简单方案的公司,在性能改进后,数据是这样的:
Reddit:页面加载快 20%,用户停留时间增加 15%
某电商平台:首屏快 1.5 秒,转化率增加 12%
某金融应用:交互响应从 450ms 降到 120ms,用户投诉下降 40%
这才是真正该关心的指标。
那些还在苦苦支撑的技术们
Sass 和 Less:原生 CSS 追上来了
/* 原来需要 SASS */ $primary-color: #007bff; $border-radius: 4px; /* 现在用原生 CSS 就行 */ :root { --primary-color: #007bff; --border-radius: 4px; }CSS 现在支持变量、嵌套、计算。Sass 的主要优势已经不存在了。采用原生 CSS 的项目,在 2025 年增长了三分之一。
jQuery:还活着,但没人想它活着
jQuery 在 2024 年还出现在 20% 的网站上。但问题是:这 20% 基本都是老项目,没人再用它做新项目了。
jQuery 就像那些老旧的企业系统,还在运行,但谁都不想碰。
手写 Webpack 配置:成了一道折磨题
// 你还在这样做? module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-react'] } } }, // ... 十多个类似的 rules ] }现在的年轻开发者遇到 Webpack 配置就懵。他们都在用Vite(零配置)或Turbopack(自动化配置)。
什么在替代这些逝去的巨人
1. Vite:开发体验的新天花板
Vite 不是一个工具,它是一场范式转变。
它的核心理念很简单:别在开发阶段做的事,就留给浏览器去做。
CRA 的做法: 源代码 → Webpack 整体编译 → 一个大 bundle → 浏览器加载 Vite 的做法: 源代码 → 浏览器直接加载(利用 ES Module) 只在需要时,Vite 即时编译那个文件结果是什么?启动时间从 45 秒变成 4 秒。改一个文件,HMR 热更新在 100ms 内完成。
2. Zustand 和 Jotai:状态管理的极简主义
// Zustand import { create } from'zustand' const useStore = create((set) => ({ count: 0, increment: () =>set((state) => ({ count: state.count + 1 })) })) // 在组件里 function Counter() { const count = useStore((state) => state.count) const increment = useStore((state) => state.increment) return<button onClick={increment}>{count}</button> }对比 Redux,代码量少 60%,但完全能用。
3. React Query(现在的 TanStack Query):服务端状态的救世主
function Products() { const { data, isLoading } = useQuery({ queryKey: ['products'], queryFn: () => fetch('/api/products').then(r => r.json()) }) // ... }Redux 最痛苦的问题就是混在了服务端状态和客户端状态。React Query 彻底分离了这两个概念。
4. Modular Monorepo:分布式架构的平衡点
使用 Nx 或 Turborepo: ✓ 各团队独立开发 ✓ 共享代码得到管理和追踪 ✓ 增量构建(只构建改动过的部分) ✓ 可独立部署各模块 ✗ 没有微前端的性能开销5. 原生 CSS + Tailwind:样式的终极方案
主题系统用 CSS Variables
快速开发用 Tailwind(1000+ 个预制 Class)
特殊样式用 CSS Modules
三件套搭配使用,覆盖所有场景。
你的项目正在用过时的技术吗?自检清单
[ ] 还在用 CRA?→ 迁移到 Vite
[ ] 还在用 Redux 管理客户端状态?→ 迁移到 Zustand,用 React Query 管理服务端数据
[ ] 还在用微前端但只有 3-5 个应用?→ 转向 Monorepo 模式
[ ] 还在用 Emotion/styled-components 且有性能问题?→ 逐步迁移到 Tailwind + CSS Modules
[ ] 前端代码和后端在一个 Monolith 中,部署很慢?→ 分离,用 Monorepo 模式管理
如何安全地迁移
第 1 步:审查你的技术栈
问自己这几个问题:
这个技术是因为真正的需求选择的,还是因为它很流行?
它对用户体验有什么影响?(真实数据,不是猜测)
有没有更轻量的替代方案?
现在的维护成本有多高?
第 2 步:逐步迁移,别激进
CRA → Vite 迁移: 周期:2-3 周 风险等级:低(完全兼容) 影响范围:只有构建流程 Redux → Zustand 迁移: 周期:按模块,每个模块 1-2 周 风险等级:中(需要测试每个模块) 影响范围:一个特性模块一个特性模块地做 CSS-in-JS → Tailwind 迁移: 周期:可以很长,新代码用 Tailwind,旧代码保留 风险等级:低(可以共存) 影响范围:逐步扩大覆盖面第 3 步:建立"简单性"度量
// 每个新加入项目的依赖,问一下: 新依赖评分表: - 是否是原生浏览器 API 的补充?(+10 分) - 是否让代码行数增加超过 20%?(-10 分) - 是否有显著的性能成本?(-15 分) - 是否让新人学习成本增加?(-5 分) - 是否被广泛使用(GitHub Stars > 10k)?(+5 分) 只有总分 > 0,才考虑加进来第 4 步:测量,测量,再测量
别凭感觉。用真实数据说话:
// 埋点测量性能 const start = performance.now() // 你的代码 const duration = performance.now() - start console.log(`操作耗时:${duration}ms`) // 跟踪关键业务指标 trackEvent('purchase', { value: price, firstContentfulPaint: xxx, largestContentfulPaint: xxx })迁移前后,对比这些指标:
指标 | 前 | 后 | 目标改进 |
|---|---|---|---|
首屏加载时间 | -20% | ||
INP (交互延迟) | -30% | ||
页面大小 | -15% | ||
构建时间 | -40% | ||
新人上手时间 | -50% |
2026年的前端选择观
技术很迷人,但用户和企业真正关心的是两件事:
高效能—— 你的网站打开和交互有多流畅
可靠性—— 能否稳定地完成预期任务
那些让开发者获得成就感但无意中增加了用户使用成本的技术,正在被企业重新评估。
相反,那些不需要开发者过度思考、却能为用户提供最好体验的技术,正在成为新的标准。
2026年的前端,追求的是:以最少的复杂性,换取最好的用户体验。
如果你的技术栈现在感觉有点"沉重",或许值得考虑是否有更简洁的选择。不是为了赶时髦,而是因为商业价值最终还是回到了用户体验这个基本点。
如果这篇文章让你有所启发,欢迎关注《前端达人》🎯
我们每周深入分析前端的最新动向、性能优化案例、以及那些真正能提升用户体验的技术实践。
点赞、分享、推荐给更多正在为技术选型苦恼的同学。