Files
workspace/code/fms/.qoder/repowiki/zh/content/开发指南/调试排错.md
T
2026-08-23 21:02:41 +08:00

17 KiB

调试排错

**本文引用的文件** - [FpsMonitor.vue](file://fms-vue/src/components/FpsMonitor.vue) - [application.yaml](file://fms-api/src/main/resources/application.yaml) - [FmsApiApplication.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java) - [measure.mjs](file://.fps-probe/measure.mjs) - [debug-edit.mjs](file://.fps-probe/debug-edit.mjs) - [debug-login.mjs](file://.playwright-cli/debug-login.mjs) - [inspect-vue-root.mjs](file://.playwright-cli/inspect-vue-root.mjs)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能注意事项
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本指南面向 FMS 项目的开发与测试人员,提供前后端联调、前端与后端调试方法、常见问题定位、性能优化与瓶颈定位、以及基于 Playwright 的自动化脚本使用建议。内容结合项目内已有的 FPS 监控组件、Playwright 探针脚本、API 配置与启动入口,帮助快速定位网络、数据库、权限验证等问题,并给出可操作的步骤与可视化流程图。

项目结构

FMS 包含前端 Vue 应用、后端 Spring Boot API、以及用于性能测量与页面交互的 Playwright 脚本集:

  • 前端(fms-vue):提供 UI 与 FPS 监控组件,便于在浏览器中观察渲染性能。
  • 后端(fms-api):Spring Boot 服务,提供数据接口与鉴权能力,配置文件集中管理端口、上下文路径、数据库连接池等。
  • 探针与脚本(.fps-probe、.playwright-cli):通过 Playwright 驱动浏览器进行滚动、编辑、登录等场景的性能测量与状态检查。
graph TB
subgraph "前端"
FE["Vue 应用<br/>含 FPS 监控组件"]
end
subgraph "后端"
BE["Spring Boot API<br/>端口 8088 /api"]
end
subgraph "自动化与探针"
PW["Playwright 脚本<br/>测量/调试/巡检"]
end
FE --> BE
PW --> FE
PW --> BE

图示来源

章节来源

核心组件

  • 前端 FPS 监控组件:以 requestAnimationFrame 采样当前帧率、平均帧率与最低帧率,并提供历史柱状图与拖拽复位功能,适合在开发阶段直观观察页面卡顿。
  • 后端启动与配置:Spring Boot 应用入口初始化雪花 ID 生成器;application.yaml 定义服务端口、上下文路径、JWT 密钥、数据库连接池参数与文件存储策略。
  • Playwright 探针脚本:
    • measure.mjs:在真实表格容器上执行滚动、隐藏绘制等场景,统计 FPS、帧间隔、渲染行数与编辑器数量。
    • debug-edit.mjs:注入登录态后进入表格页,定位单元格并模拟点击,输出点击命中元素与编辑器挂载情况。
    • debug-login.mjs:注入会话到登录页,跳转路由并截图,辅助排查路由与鉴权流程。
    • inspect-vue-root.mjs:注入会话并拦截 API 返回,检查 Vue 根实例与特定组件实例属性,便于定位组件状态问题。

章节来源

架构总览

下图展示前端、后端与自动化脚本之间的交互关系,包括登录态注入、API 请求、表格渲染与性能测量。

sequenceDiagram
participant Dev as "开发者"
participant PW as "Playwright 脚本"
participant FE as "Vue 前端"
participant BE as "Spring Boot API"
participant DB as "数据库"
Dev->>PW : 运行测量/调试脚本
PW->>FE : 打开页面并注入登录态
FE->>BE : 发起数据加载/分页请求
BE->>DB : 查询业务数据
DB-->>BE : 返回数据集
BE-->>FE : 返回 JSON 响应
FE->>FE : 渲染表格/编辑器
FE->>FE : FPS 监控采样
PW->>FE : 执行滚动/点击/截图
PW-->>Dev : 输出 FPS/帧间隔/状态

图示来源

详细组件分析

前端 FPS 监控组件

该组件通过高频 rAF 循环统计当前 FPS、平均值与最小值,并以柱状图展示历史趋势。支持拖拽移动与重置统计,避免后台暂停导致均值失真。

flowchart TD
Start(["组件挂载"]) --> Init["初始化采样窗口"]
Init --> RAF["requestAnimationFrame 循环"]
RAF --> Tick{"达到采样间隔?"}
Tick --> |否| RAF
Tick --> |是| Calc["计算当前/平均/最低 FPS"]
Calc --> Update["更新历史柱状图"]
Update --> RAF
RAF --> Visibility{"页面可见性变化?"}
Visibility --> |切回前台| ResetWin["重置采样窗口"]
Visibility --> |保持后台| RAF

图示来源

章节来源

后端启动与配置

后端启动时设置雪花 ID 生成器选项,并通过 application.yaml 暴露服务端口与上下文路径,同时配置 JWT 与数据库连接池参数。

classDiagram
class FmsApiApplication {
+main(args)
}
class Config {
+server.port
+server.servlet.context-path
+spring.application.name
+fms.auth.jwt-secret
+fms.database.pool.*
}
FmsApiApplication --> Config : "读取配置"

图示来源

章节来源

Playwright 性能测量脚本

脚本在表格容器中执行滚动或编辑场景,统计 FPS、帧间隔、渲染行数与编辑器数量,支持多轮测量与汇总。

sequenceDiagram
participant PW as "measure.mjs"
participant Page as "浏览器页面"
participant Table as ".fms-table"
PW->>Page : 打开页面并等待表格就绪
PW->>Table : 选择滚动容器
loop 每帧
PW->>Table : 滚动 scrollTop += step
PW->>Page : 记录帧间隔与计数
end
PW-->>PW : 计算 FPS/avgFrame/minGap/maxGap
PW-->>PW : 输出渲染行数/编辑器数/展示格数

图示来源

章节来源

Playwright 登录与路由调试脚本

脚本注入登录态到 sessionStorage,导航至目标路由并截图,便于验证鉴权与路由跳转逻辑。

sequenceDiagram
participant PW as "debug-login.mjs"
participant Page as "浏览器页面"
PW->>Page : 打开登录页
PW->>Page : 注入 fms-login 会话
PW->>Page : 跳转到 /file-demo
PW->>Page : 等待 DOM 稳定
PW-->>PW : 截图并输出树节点信息

图示来源

章节来源

Playwright Vue 根实例检查脚本

脚本注入会话并拦截 API 返回,检查 Vue 根实例与特定组件实例属性,辅助定位组件状态与数据绑定问题。

sequenceDiagram
participant PW as "inspect-vue-root.mjs"
participant Page as "浏览器页面"
PW->>Page : 添加 initScript 注入会话
PW->>Page : 拦截 /api/** 请求并返回模拟数据
PW->>Page : 打开 /file-demo
PW->>Page : 评估 #app 与 __vue_app__ 属性
PW-->>PW : 输出根实例类型与 Splitter 实例信息

图示来源

章节来源

依赖关系分析

  • 前端依赖 Vue 运行时与组件库,FPS 监控组件依赖 requestAnimationFrame 与浏览器事件。
  • 后端依赖 Spring Boot、数据库连接池与 JWT 鉴权;配置集中在 application.yaml。
  • Playwright 脚本依赖 chromium 内核,通过注入会话与拦截 API 实现无头环境下的调试与测量。
graph LR
FE["Vue 前端"] --> |"HTTP /api/*"| BE["Spring Boot API"]
BE --> |"JDBC/连接池"| DB["数据库"]
PW["Playwright 脚本"] --> |"控制浏览器"| FE
PW --> |"可选拦截/注入"| BE

图示来源

章节来源

性能注意事项

  • 前端 FPS 监控:
    • 使用内置 FPS 监控组件观察当前/平均/最低帧率与历史趋势,拖拽位置避免遮挡操作区。
    • 关注低帧率时段对应的用户操作(如滚动、编辑),并结合表格渲染行数与编辑器数量定位热点。
  • 后端性能:
    • 调整数据库连接池参数(初始大小、最大活跃数、空闲检测等)以匹配负载。
    • 开启日志与慢查询追踪,结合接口耗时与数据库执行计划定位瓶颈。
  • 自动化测量:
    • 使用 measure.mjs 在不同场景(静止、滚动、隐藏绘制、编辑中滚动)下采集 FPS 与帧间隔,识别渲染与 JS 开销。
    • 通过多轮测量与页面重载减少状态污染,确保结果可比性。

[本节为通用指导,不直接分析具体文件]

故障排查指南

网络连接问题

  • 现象:前端无法加载数据或报跨域错误。
  • 排查步骤:
    • 确认后端服务端口与上下文路径(application.yaml 中的 server.port 与 context-path)。
    • 使用 Playwright 脚本打开页面并检查控制台错误与网络面板。
    • 在 inspect-vue-root.mjs 中拦截 /api/** 请求,验证返回结构与状态码。
  • 参考脚本与配置:

章节来源

数据库连接问题

  • 现象:接口返回错误或数据为空。
  • 排查步骤:
    • 检查 application.yaml 中数据库连接池配置(initial-size、max-active、validation-query 等)。
    • 启动后端并查看日志,确认连接池初始化成功。
    • 使用简单查询验证数据库连通性。
  • 参考配置:

章节来源

权限验证问题

  • 现象:登录后仍无法访问受保护页面或数据。
  • 排查步骤:
    • 使用 debug-login.mjs 注入 fms-login 会话并跳转目标路由,验证路由守卫与权限校验。
    • 检查 sessionStorage 与 localStorage 中的键值是否正确设置。
    • 在后端检查 JWT 密钥与过期时间配置。
  • 参考脚本与配置:

章节来源

表格滚动与编辑卡顿

  • 现象:滚动或编辑时 FPS 下降明显。
  • 排查步骤:
    • 使用 FPS 监控组件观察卡顿时段。
    • 使用 measure.mjs 在“滚动”和“编辑中滚动”场景下采集 FPS、帧间隔与渲染行数。
    • 使用 debug-edit.mjs 定位点击命中元素与编辑器挂载情况,确认是否出现多余重绘。
  • 参考脚本:

章节来源

内存泄漏检测

  • 现象:长时间使用后页面变慢或崩溃。
  • 排查步骤:
    • 在浏览器性能面板录制内存快照,对比不同时间点的使用量。
    • 使用 Playwright 脚本重复操作(滚动/编辑)并截图,观察内存增长。
    • 检查是否有未清理的事件监听器或定时器。
  • 参考工具:
    • 浏览器开发者工具(内存面板)
    • Playwright 脚本(可复用 measure.mjs 的场景循环)

[本节为通用指导,不直接分析具体文件]

错误日志分析与诊断流程

  • 前端:
    • 打开控制台查看报错堆栈与网络请求失败原因。
    • 使用 inspect-vue-root.mjs 拦截 API 并打印请求/响应,定位数据格式问题。
  • 后端:
    • 查看启动日志与异常堆栈,确认服务端口与上下文路径。
    • 检查数据库连接池与 JWT 配置,必要时调整超时与重试策略。
  • 参考:

章节来源

结论

通过内置 FPS 监控组件与 Playwright 探针脚本,FMS 项目提供了完善的前端性能观测与自动化调试能力。结合后端配置与启动入口,可以快速定位网络、数据库与权限验证问题。建议在开发阶段持续使用 FPS 监控与自动化测量,结合日志与内存分析,形成闭环的性能优化与故障排查流程。

[本节为总结,不直接分析具体文件]

附录

常用调试命令与步骤

  • 启动后端服务:
    • 检查 application.yaml 中的端口与上下文路径,确保服务可用。
    • 参考启动入口类与配置扫描注解。
  • 运行前端 FPS 监控:
    • 在页面中启用 FPS 监控组件,观察实时帧率与历史趋势。
  • 执行 Playwright 测量:
    • 使用 measure.mjs 在指定场景下采集 FPS 与帧间隔。
    • 使用 debug-edit.mjs 验证表格编辑与点击命中。
    • 使用 debug-login.mjs 注入会话并截图验证路由。
    • 使用 inspect-vue-root.mjs 检查 Vue 根实例与组件状态。

章节来源