特斯拉引荐奖励
Posted by quentin 在 Friday, 24 November 2023使用我的引荐链接下单,可赢得8000元车漆选装礼金。限抵扣付费车漆选配的价款。https://ts.la/ywjrg531660
代码复用的三个谎言:组件库、工具函数和Copy-Paste都不是答案
Posted by quentin 在 Thursday, 16 April 2026最近看到前端组有同学在讨论要不要把某个逻辑抽成公共工具函数。这个场景太熟悉了,几乎每个团队都在纠结类似的问题:到底什么该复用,什么不该复用?
我的观察是,大部分关于代码复用的讨论都建立在错误的前提上。不管是组件库、工具函数库,还是Copy-Paste,都不是真正的答案。真正的问题在于,我们对"复用"这个概念的理解就是错的。
组件库的幻觉
前端圈最大的迷思之一是:我们需要一个强大的组件库。
这个想法听起来很美好。把所有常用的UI组件抽象出来,封装成统一的库,然后各业务线直接调用。听起来既能保证一致性,又能提高效率。
但现实总是很打脸。
我见过太多这样的场景:某个业务需要一个带搜索功能的下拉选择器,组件库里有个Select组件。产品经理说要加个"最近搜索"功能,组件库维护者说这是业务定制需求,不该放在公共组件里。业务开发者只好在外面包一层。然后产品经理又说搜索结果要支持分组显示,再包一层。最后这个Select组件被包了三层,代码比从头写一个还要复杂。
问题出在哪?出在我们把"复用"等同于"抽象"。
前端性能优化的迷思:为什么大部分优化都是在浪费时间
Posted by quentin 在 Thursday, 16 April 2026最近看到团队在讨论页面首屏加载优化,有人提出要把某个 10KB 的图片压缩到 8KB,说能省 20% 的体积。我突然意识到,前端性能优化可能是我见过的最容易被过度执行、也最容易做错方向的技术工作。
不是说性能优化不重要,而是大部分人根本不知道自己在优化什么,也不知道这个优化到底值不值得。
性能优化的第一个迷思:技术指标不等于用户体验
打开任何一篇性能优化的文章,你都能看到一堆指标:LCP、FCP、TTI、FID、CLS。这些指标确实有价值,但问题是,你真的理解这些指标背后的含义吗?
我见过一个团队花了两周时间把 FCP 从 1.2 秒优化到 0.8 秒,但实际上首屏还是白屏,因为真正有意义的内容要等接口返回才能显示。用户看到的"快",和监控平台上的数字,完全是两回事。
LCP 优化≠用户感知快。LCP 是"最大内容绘制",但如果你的最大内容是一张无关紧要的背景图,优化它有什么意义?用户真正关心的是"我能不能看到商品价格"、"我能不能点击购买按钮",而不是你的背景图加载了多快。
微前端的陷阱:为什么大部分团队不需要qiankun
Posted by quentin 在 Thursday, 16 April 2026微前端这几年很火,但我见过太多团队在盲目引入后陷入困境。最常见的情况是:团队只有3-5个前端开发,维护着2-3个业务模块,却花了两个月时间接入qiankun,结果代码复杂度翻倍,问题却没解决几个。
这不是qiankun的问题,而是大部分团队根本不需要微前端。
微前端解决的是组织问题,不是技术问题
很多人把微前端当成技术架构来看,这是第一个误区。
微前端的核心价值在于让不同团队能够独立开发、独立部署自己的模块,而不是解决技术上的模块化或性能问题。如果你的团队只有一个前端组,那么引入微前端就像一个人住别墅——空间是有了,但打扫卫生的时间也翻倍了。
我在金融业务中见过一个典型案例:公司有理财、基金、保险三条业务线,分属三个独立团队,各团队技术栈不同(React、Vue、Angular都有),发布节奏也不一致。这种情况下,微前端是合理的选择,因为组织边界清晰,技术隔离是刚需。
但大部分团队的情况是:前端是一个Team,后端可能分了几个服务,然后看到微服务很流行,就觉得前端也该"微"一下。这就是刻舟求剑了。
微前端带来的复杂度被严重低估
引入微前端后,你要面对的问题比想象中多得多:
状态管理的终局:不是Redux,也不是Context
Posted by quentin 在 Thursday, 16 April 2026前端圈对状态管理的执念,可能是过去十年最大的集体焦虑。从Flux到Redux,从MobX到Recoil,从Context API到Zustand,每隔一两年就会冒出一个"更简洁"的方案,然后大家又开始新一轮的重构和争论。
但我越来越怀疑一件事:我们在用前端的方式解决本不该存在的前端问题。
状态管理焦虑的根源
大部分前端开发者第一次接触Redux的时候,都会有类似的困惑:为什么一个简单的计数器需要写这么多代码?action、reducer、dispatch、connect,整整一套ceremony,就为了让组件拿到一个数字。
当时流行的解释是:"这是为了可维护性。" 等项目大了你就懂了。
确实,等项目大了,我懂了。但我懂的不是Redux的好处,而是我们把太多不该放在前端的状态放在了前端。
举个真实场景:用户的投资组合数据。
API 设计的两个误区:RESTful 和 GraphQL 都不是银弹
Posted by quentin 在 Wednesday, 15 April 2026前两天团队讨论新业务的技术方案,后端同学提议用 GraphQL,理由是"前端可以自己控制数据结构,不用频繁改接口"。我问了一句:"你们后端有多少人?"答:"3个人"。我说:"那别折腾了,RESTful 就够了"。
这不是第一次遇到这种情况。这些年做全栈,从后端写 API 到前端调 API 再到 BFF 层设计 API,见过太多技术选型上的执念。最常见的两个误区:一是觉得 RESTful 就是正统,必须符合所有规范;二是觉得 GraphQL 能解决前后端协作的所有问题。
事实上,这两个都不是银弹。
RESTful 的形式主义陷阱
大部分开发者第一次接触 API 设计,学的都是 RESTful 规范。GET 查询、POST 创建、PUT 更新、DELETE 删除,资源路径用名词不用动词,状态码要严格遵循 HTTP 标准。这些原则没错,但问题在于,很多人把它当成了教条。
前后端分离的代价:为什么全栈工程师越来越香
Posted by quentin 在 Wednesday, 15 April 2026前后端分离已经是前端圈的"政治正确"了。但最近几年,我观察到一个反常识的现象:不少团队在推进前后端分离几年后,又开始招聘全栈工程师,甚至把部分项目重新合并。
这不是技术倒退,而是对"分离成本"的重新认识。
前后端分离的三大隐形成本
大部分团队谈前后端分离时,强调的是"职责清晰"、"技术栈解耦"、"并行开发"。但很少有人提它的代价。
1. 沟通成本:从「对话」变成「会议」
以前一个功能,全栈工程师自己从前端写到数据库,遇到问题自己调试,半天搞定。
前后端分离后?先写需求文档,前后端对齐接口,联调发现参数不对,再开个会讨论,改完继续联调。原本半天的事,拉长成三天。
我不是说会议不重要,而是很多"会议"本质上是在弥补"认知鸿沟"——前端不知道后端为什么这么设计,后端不知道前端要什么。
金融业务尤其明显。理财产品的持仓逻辑,涉及到实时资产、历史收益、预期收益三种数据,前端需要合并展示。如果后端不理解前端的渲染逻辑,可能会返回三个接口;前端不理解后端的数据模型,可能会要求合并成一个接口但无法满足缓存策略。
这不是技术问题,是认知问题。
BFF的谎言:为什么前端团队不应该拥有后端代码
Posted by quentin 在 Wednesday, 15 April 2026BFF(Backend For Frontend)这个概念被讨论了很多年,大部分文章都在讲它的好处:给前端更多控制权、减少沟通成本、提升迭代效率。但我想说点不一样的:BFF可能是过去十年最被滥用的架构模式,它给很多团队带来的不是效率提升,而是隐性灾难。
这个判断可能有争议,但基于我多年全栈实践的观察,大部分公司的BFF实践都走偏了。问题不在于BFF本身,而在于一个看似合理但实则危险的假设:前端团队应该拥有和维护BFF代码。
谁在真正维护BFF
先说个常见场景。你们公司引入了BFF架构,用Node.js写,部署在前端团队的代码仓库。最开始确实很爽,需要什么接口自己写,数据格式自己定,不用等后端排期。
三个月后,问题来了:
- 后端换了新的认证方式,BFF层要同步升级
- 用户反馈接口偶尔超时,排查发现是BFF内存泄漏
- 运营要做数据统计,需要在BFF加审计日志
- 监控告警BFF的某个依赖包有安全漏洞
- 后端要做灰度发布,BFF要配合调整负载均衡策略
Node.js BFF层的三个认知误区:不只是接口转发
Posted by quentin 在 Wednesday, 15 April 2026很多团队在引入 Node.js 做 BFF(Backend for Frontend)层时,都会陷入一个误区:把它当成简单的接口转发器。写几个路由,调用后端 API,拼装数据,返回给前端,就算完成任务了。
这种理解不能说错,但实在太浅。
我见过不少团队的 BFF 层,最后都沦为"接口透传中间件"——前端要什么数据,就透传什么接口;后端改了接口,前端也跟着改。这样的 BFF 层除了增加一层延迟和维护成本,没有创造任何价值。
今天想聊聊三个常见的认知误区,以及 BFF 层真正应该做什么。
误区一:BFF 只是为了"聚合接口"
很多人认为 BFF 层的核心价值是"把多个后端接口聚合成一个"。比如一个页面需要调用用户信息、订单列表、推荐数据三个接口,前端调三次太慢,所以在 BFF 层写个聚合接口,一次性返回所有数据。
这个思路听起来很合理,但问题在于:聚合只是手段,不是目的。
真正的目的是什么?是为前端定制适合它的数据结构和粒度。
