
在这个圈子摸爬滚打这么久,我见过太多技术极其过硬的前端工程师,在面对产品经理的不合理需求时,却像个刚入职的实习生一样唯唯诺诺。
明明知道这个需求会把线上系统搞崩,明明知道这个交互在移动端根本跑不动,但嘴上却只能憋出一句:嗯......这个有点难......我试试吧。😖
然后你就背上了一个不可能完成的任务,加了三天班,最后交出一个勉强能看但随时翻车的半成品。上线后果然出了 Bug,产品经理反手一个甩锅:当初你答应能做的啊😢?
这种哑巴亏,你还打算吃多久?今天讲点干货吧👇
为什么大多数前端说不出口?
不是因为你性格软弱,而是因为你缺乏一套用技术语言精准反击的话术。
当产品经理说 这个功能竞品都有,我们也加上 的时候,如果你只会回一句 这个做不了 或者 时间不够 ,你在对方眼里就是一个在推活的懒人。因为 做不了 和 时间不够 不是技术判断,是情绪表达。产品经理的职责就是推动需求落地,你给他的是情绪而不是事实,他当然要继续逼你。
真正的高级前端拒绝需求时,从来不说做不了。他们说的是:能做,但代价是什么,你来选。
把决策权和风险抛给对方,这才是最优雅的防御姿态🫡。
场景一:无限滚动列表里塞 10 万条富文本数据
产品经理说:把这个列表改成无限滚动,一次性把所有数据都加载出来,用户体验更好。
初级前端的回应:好的我试试。------然后写了一个 useEffect 里一把梭请求全量数据,页面直接卡死。

可以做,但我需要你了解一个技术事实:浏览器的 DOM 渲染引擎有物理上限。当页面上同时挂载超过 5000 个 DOM 节点时,低端安卓机的帧率会从 60fps 暴跌到 15fps 以下,用户会感受到极其明显的卡顿和掉帧。10 万条富文本数据意味着至少 30 万个 DOM 节点,这会直接导致页面白屏崩溃。
解决方案 :我用虚拟滚动(Virtual Scroll)来实现。视觉上用户看到的是无限滚动,但实际上浏览器在任何时刻只渲染可视区域内的 20 到 30 条数据。体验完全一致,但内存占用从几个 G 降到几十 MB。唯一的代价是开发周期多 2 天,你能接受吗?
场景二:要求所有页面加载时间控制在 1 秒以内
产品经理:竞品的页面打开速度特别快,咱们所有页面也必须 1 秒内加载完成。

这个目标在技术上需要拆解。页面加载速度不完全由前端控制,它是一条全链路的结果。从用户按下回车到看见内容,中间经过了 DNS 解析、TCP 握手、TLS 协商、服务端接口响应、CDN 回源、前端资源下载和渲染------前端能优化的,只是最后一段。
我可以把前端的资源加载和渲染时间压缩到 300ms 以内,但如果后端的核心接口响应本身就要 800ms,那这个 1 秒的目标,需要后端一起来扛。我建议我们先跑一次全链路的 Lighthouse 性能分析,精确定位瓶颈到底在哪一段,然后制定分段的优化目标,而不是笼统地喊一个 1 秒的口号。
场景三:在移动端实现一个极其复杂的拖拽排序交互
产品经理要求:参考飞书一样的看板,我们也要在手机端做一个可以跨列拖拽的卡片排序。

桌面端的拖拽和移动端的拖拽,在技术实现上是完全不同的两个物种。桌面端有 mousedown、mousemove 这些精准的鼠标事件,但移动端的触摸事件(touchmove)会和浏览器原生的页面滚动产生严重冲突。如果处理不好,用户在拖拽卡片时会触发页面滚动,在滚动页面时又会误触拖拽,体验极其割裂。
更关键的是,跨列拖拽涉及到极其复杂的状态流转和动画插值计算。以咱们目前的排期,如果要做到 Trello 级别的流畅度,至少需要 3 周的专项开发加上大量的真机适配测试。我的建议是先用长按弹出菜单的方式实现移动到其他列的功能,交互成本低,稳定性有保障,开发周期只需要 3 天。等下个版本有充足排期时,我们再做完整的拖拽方案。
场景四:要求前端本地加密用户的敏感数据
产品经理说:为了数据安全,用户的手机号和身份证在前端就先加密,然后再传给后端。

这个方案存在一个根本性的安全漏洞。前端的所有代码,包括你的加密算法和密钥,对用户来说是完全透明的。任何一个懂技术的人,打开浏览器的 DevTools,就能看到你的加密密钥和加密逻辑,然后轻松地逆向解密。这就像你把保险箱和钥匙放在同一个抽屉里,锁了也等于没锁。
真正的安全加密,必须在服务端完成。前端能做的是走 HTTPS 保证传输链路的安全,以及在表单层面做基本的格式校验和脱敏展示(比如手机号中间四位显示星号)。如果业务确实需要端到端加密,那应该由后端下发一次性的公钥,前端用公钥加密后传输,私钥永远不离开服务器。这个方案需要后端配合,我可以拉一个三方会议和后端一起对齐🤷♂️。
高手从来不硬刚,而是给选择题
回头看看上面这些典型场景,你会发现一个共同的规律:高级前端从来不会直接说做不了,而是永远在说能做,但代价是 X,我建议 A,B,C 方案中,选择一个替代。

这背后的底层逻辑是什么?是你在用极其专业的技术事实,帮产品经理做了一次风险评估和成本核算。
当你告诉对方 10 万条 DOM 节点会导致页面崩溃时,你不是在推活,你是在保护线上系统的稳定性。
产品经理不是你的敌人,他们只是不了解浏览器的物理边界。而你作为前端工程师,最核心的职责之一,就是把这些看不见的技术边界,翻译成对方能听懂的业务风险。
能用技术语言说清楚为什么不能这么做的人,永远比闷头写代码的人值钱。
因为前者在帮公司避免灾难,后者只是在执行指令🤔。
让对方觉得是自己做出了正确的决策
最后分享一个在这行摸爬滚打多年后悟出来的心法。
当你用技术语言拆解完风险,并给出了替代方案之后,永远不要说 所以我们应该用方案 B 。而是要说:方案 A 的风险是这些,方案 B 的代价是那些,你觉得哪个更适合咱们当前的业务阶段?
把最终的决定权交回给产品经理。让对方觉得是自己经过深思熟虑后,做出了一个更稳妥的选择。
这不是虚伪,这是职场里最基本的智慧。你用专业能力守住了技术底线,对方用决策权维护了自己的职责边界,双方都有体面。
比起那些一拍桌子 这个做不了 然后闹得不欢而散的硬刚,这种方式不仅能保护你的系统,还能保护你的人际关系和职业口碑。
你们觉得呢?
