工作台常见问题是把每张业务表的所有记录逐条取回,再由 PHP 计算待办和统计数。数据量小时看不出来,业务增长后首页会出现慢查询、重复计数和不同模块数字对不上的情况。
先定义每个指标的口径
“待审批”按当前待办节点和审批人计算;“我发起的申请”按申请人计算;“项目完成率”要说明分母是否排除取消任务。把指标口径写清楚,避免同一个数字在卡片、列表和报表中采用不同条件。
让数据库做可索引的聚合
- 查询只选工作台需要的字段,避免加载整条记录和关联大字段。
- 为高频筛选组合建立合适索引,例如状态、处理人、部门与创建时间。
- 检查分页、关联查询和统计查询的执行计划,避免 N+1 查询。
- 跨多个模块的统计可设置短时缓存,但业务变更后要明确失效策略。
不要把高频待办统计简单缓存很久,否则审批完成后用户仍看到旧提醒。可以把实时待办与低频历史汇总分开:待办尽量准确,趋势图或大盘统计允许短时间延迟。
用真实数据验证性能
测试时覆盖空数据、大部门、多角色、跨月统计和集中审批高峰。记录 SQL 执行时间与返回条数,优先优化最慢且调用最频繁的查询。工作台的目标不是堆满图表,而是让用户快速判断下一步要处理什么。