性能是一份预算:四项指标、二十格与四十小时

他的首页在 Lighthouse 拿了 98 分,客户还是说慢。于是他把「快」写成四项预算、五条路径的二十个格子和一年四十小时的时间表,再用每月账单验证投入是否划算,并算出 27.6 美元的回本时薪与 1,104 美元年省。

分数是别人的尺子,预算是自己的。

一、一次「分数很好但用户说慢」的对话

2026 年 9 月 18 日,客服转来一封邮件,只有两行:客户说任务板「点开要等半天」,附了一张手机截图,白屏中间一个转圈。他当天下午打开自己的 Lighthouse,首页 98 分,移动端 96 分,四项核心指标全绿。

以下情境为教学假设,人物、引语和数字不代表经核实的真实案例。

晚上他用手机在 4G 下打开同一个页面,首屏 4.2 秒。分数和体感之间的差距不是仪器坏了,而是两者测的不是同一件事:实验室跑的是受控环境,缓存为空但网络很快;客户用的是 p75 慢网 1.6 Mbps,账号里有 100 个项目,浏览器里还压着上一次的旧缓存。

他先怀疑是客户网络差。第二天他拿同一台手机、同一张 4G 卡打开别的产品,再打开自己的,两次的差别只能来自页面本身。同一条网络、同一台设备、同一个浏览器,这一条排除法比任何分数都直接。

他把过去三个月的抱怨邮件按页面归类,落点只有五条路径:首页、项目列表、任务详情、设置、导出。导出甚至不是慢,是失败——34 秒的同步导出撞上网关 30 秒超时,用户看到的是错误页,不是等待。

这五条路径不是按页面大小选的,是按「用户在哪一步停下」选的:首页停下是没进来,列表停下是找不到,详情停下是不敢点,导出停下是白等一场。设置页是唯一一条抱怨几乎都指向文案而不是等待的路径。

那天晚上他没有改一行代码。他做了另一件事:给这五条路径各写四个上限,把「快」从形容词变成四个可以复算的数字。

二、四项预算与五条路径

预算阈值改前改后
首屏 LCP p75≤ 2.0 s4.2 s1.8 s
首屏传输≤ 200 KB412 KB168 KB
API p95≤ 400 ms1,240 ms320 ms
列表页查询≤ 5 次1,200 次3 次

四个数字不是随便挑的:一个管用户感受(LCP),一个管传输体积(KB),一个管服务端(p95),一个管数据库(查询次数)。从浏览器到数据库,一条链四个关口,再加第五个就没人看了。

阈值也不是拍出来的。200 KB 来自慢网:p75 下行 1.6 Mbps 即 1,600 Kbps,传 200 KB 需要 200 × 8 ÷ 1,600 = 1.0 秒,刚好是「还愿意等」的传输时间。LCP 2.0 秒是这条传输时间加上 TTFB 与渲染之后的剩余额度。API p95 400 ms 对应首屏四段里的 TTFB 0.4 秒。列表页 5 次查询,是「一次主查询加两次聚合,不超过一只手」。

四项里最容易写错的是 p95。它必须是 p95,不能是平均值:平均值会把最慢的一批请求藏起来,而那批请求恰好来自数据最多、付钱最多的账号。把平均值写进预算,等于给自己发一张及格证。

阈值每年只调一次。调得太勤,格子会变成追着自己跑;从不调,格子会脱离用户。调阈值的那一天要写下理由,否则下一季度复测时,没人说得清为什么是 200 KB 而不是 180 KB。

五条路径而不是全部页面,因为预算是注意力合约。二十个格子已经需要每季度复测一次;把所有页面都写进预算,第一次复测就会放弃。

三、二十格怎么打分

路径LCP ≤ 2.0 s首屏 ≤ 200 KBp95 ≤ 400 ms查询 ≤ 5 次改前改后
首页✗ 4.2 s✗ 412 KB✗ 1,240 ms✗0/44/4
项目列表✗✗✗ 1,240 ms✗ 1,200 次0/44/4
任务详情✗✗✗✗0/44/4
设置✓✓✓✓4/44/4
导出✗✗✗ 34 s✗0/44/4

二十格是四项预算乘五条路径。改前只有 4 格达标,全部来自设置页——那是一条轻路径,四个指标本来就在阈值内;表里 1,240 ms 是全站聚合值,不是这一条路径的值。其余四条路径一共 16 格全空:首页 LCP 4.2 秒、首屏 412 KB,列表页 1,200 次查询,导出 34 秒。改后 20 格全过:LCP 1.8 秒、首屏 168 KB、API p95 320 ms、列表页 3 次查询。

不打平均分,是因为平均分会把最坏的一格稀释掉。一条 4.2 秒的路径和四条达标路径平均之后,看起来「接近达标」,但用户记住的正是那 4.2 秒。格子制只说一件事:一格不过就是不过,不给部分分。

格子还负责排序。改前空了 16 格,但十六格的价值并不相同:设置页那 4 格本来就在,首页那 4 格影响每一个新用户,导出那 4 格影响的是「能不能用」。同样是 1 格,先补哪一格,要看它站在哪条路径上。

这也是为什么不把格子做成加权总分。权重一旦出现,就会有人去算「差一点要不要修」,而预算要的回答只有「过」或「不过」。

打分条件必须固定:同一台设备、同一条网络、同一个账号、同一批数据。条件一换,格子就会失真;而失真的格子比没有格子更糟,因为它会给出一个看起来精确的错误结论。

四、四十小时怎么分

项目小时产出
诊断5按路径排序的瓶颈清单
首屏5LCP 4.2 → 1.8 s,412 → 168 KB
查询7列表页 1,200 → 3 次,8.0 → 0.35 s
缓存4命中率 0% → 86%
后台任务4导出 34 s → 4 s 受理、12 s 完成
第三方3登录页 640 → 180 KB,7 → 4 个标签
账单治理3月账单 210 → 118 美元
门禁与监控5四项预算进 CI
季度复测4四次复测,每次 1 h

顺序按「一格值多少小时」排,不按格子数排。诊断 5 小时排第一,因为它决定后面 35 小时花在哪里;不做诊断,首屏那 5 小时很可能花在图片上,而真正的阻塞在字体。

首屏 5 小时换回的是感受:LCP 4.2 → 1.8 秒,首屏 412 → 168 KB。查询 7 小时是九项里最贵的,因为它要动数据访问结构,不只是加索引;换回的是列表页 8.0 → 0.35 秒。

这也解释了为什么「先做首屏」在很多时候是错的。如果诊断发现瓶颈在数据库,首屏的 5 小时只能拿回传输体积那一部分,而查询的 7 小时能同时松开列表、详情与导出三条路径。顺序的价值不在哪一项更酷,而在哪一项能同时点亮更多格子。

缓存、后台任务、第三方三项都以改配置为主,单小时收益高,所以放在查询之后:先把查询降下来,缓存才有意义,否则只是把慢结果缓存得更久。

账单治理 3 小时没有直接让页面变快,它让同一套改动在账单上兑现。门禁与监控 5 小时买的是「不退回」,季度复测 4 小时买的是「知道有没有退」。

九项里没有一项叫「重写」。一个人的性能工作更像是把已有的东西挪到正确的位置:索引挪到查询上,字体挪到子集里,导出挪到队列里。重写是把预算押在一次大改上,挪位置是把预算摊在九次小改上。

全年 40 小时,是 1,920 小时的 2.1%。年省 (210 − 118) × 12 = 1,104 美元,回本时薪门槛是 1,104 ÷ 40 = 27.6 美元。这个门槛的意思是:只要你的时间每小时值超过 27.6 美元,这 40 小时就值得花;低于它,该先减功能或先涨价,而不是先做性能。

复算:
四项预算 × 五条路径 = 4 × 5 = 20 格
改前达标:设置页 4 格 = 4 ÷ 20 = 20.0%,其余四条路径 0 格
改后达标:20 ÷ 20 = 100%
投入:5 + 5 + 7 + 4 + 4 + 3 + 3 + 5 + 4×1 = 40 h
占比:40 ÷ 1,920 = 2.08% ≈ 2.1%
年省:(210 − 118) × 12 = 92 × 12 = 1,104 美元
回本门槛:1,104 ÷ 40 = 27.6 美元/h
传输下限:200 × 8 ÷ 1,600 = 1.0 s

复算里最容易被跳过的是最后一行。200 KB 不是审美选择,是 1.6 Mbps 下 1 秒的传输量;如果目标用户里有相当一部分在更慢的网络里,这个阈值要往下调,而不是往上调。

五、行动清单与复算验收

  • 写下四条预算的阈值,每条都配一个能算出这个阈值的算式。
  • 选出五条承接抱怨最多的路径,其余页面先不管。
  • 画出 4 × 5 的格子,用当前值逐格标注过或不过。
  • 数出改前达标格数,记下分母 20,不写成百分比。
  • 按「一格值多少小时」把四十小时排成顺序,而不是按工程量。
  • 给每一项投入写一个可观测的产出,写不出产出的项删掉。
  • 用最近一个月的账单算出年省,再除以总小时数得到回本门槛。
  • 把 20 格与阈值写进季度复测模板,复测只填数不改阈值。

验收标准:任取一条路径,都能说出它四项预算的当前值、阈值与最近一次复测日期。

前四条是「把账算出来」,后四条是「让账能重复」。如果只有一周,先做第一条和第三条;没有阈值和格子,四十小时的分配只是感觉。

清单里最容易被跳过的是第二条:只选五条路径。人总想一次覆盖所有页面,但预算的第一个作用是排除,第二个才是覆盖;不先排除,二十格会摊成一张没有边界的清单,第二周就停更。

使用边界与实操验收

预算只对自己有效。 四项阈值来自这款产品的五条路径与 p75 慢网,不是行业标准。换一个产品、换一批用户,200 KB 与 2.0 秒都可能不成立,唯一可以搬走的是「四项、五路径、二十格」这个结构。

二十格不是评分卡。 它的用途是排序与验收,不是给产品打分。20/20 不代表没有性能问题,只代表这二十个格子在这个季度都守住了。

省下的钱不等于赚到的钱。 1,104 美元是账单差额,不含这 40 小时的机会成本;把它当成「多出来的现金」会高估收益。

格子要复测才算数。 20 格是某个季度的快照,不是永久状态。发布十几次之后如果不复测,20/20 会在某一次发布里悄悄变成 18/20,而你不会收到通知。

数字是教学假设。 344 个账号、120 个付费用户、210 美元账单与全部时长都取自本组统一基线,不构成对任何产品性能或成本的预测。

关键参考与核验范围

以上链接于 2026-10-26 实测可公开访问;未核验版本、功能范围与政策更新。核验日期:2026-10-26。

范围上只讨论一个人的性能预算、格子打分与四十小时排序,不讨论框架选型、CDN 厂商对比与团队分工。

系列导航

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「Indie」更多文章

  1. 开源项目验收:十项能力、四维评分与三种不该开源的项目
  2. 治理、fork 与退出:17 位贡献者、82% 的提交与一次改协议的代价
  3. 双许可与企业版:九家询价、两家成交与 4,800 美元