--- name: 文件预览语法高亮影响分析 description: 代码影响范围、API 变更、数据库变更、风险评估 type: impact-analysis --- # 影响分析:文件预览语法高亮 ## 1. 代码影响矩阵 | 模块 | 文件/类 | 变更类型 | 影响级别 | 备注 | |------|---------|---------|---------|------| | **前端 - 组件** | `web/src/features/skill/code-renderer.tsx` | 新增 | 低 | 新增组件,无依赖冲突 | | **前端 - 工具** | `web/src/features/skill/file-type-utils.ts` | 修改 | 低 | 新增函数,不修改现有函数 | | **前端 - 弹窗** | `web/src/features/skill/file-preview-dialog.tsx` | 修改 | 中 | 修改渲染逻辑,需回归测试 | | **前端 - 样式** | `web/src/features/skill/markdown-renderer.tsx` | 只读 | 无 | 复用样式,不修改 | | **前端 - 依赖** | `web/package.json` | 无变更 | 无 | 复用现有 highlight.js | | **后端 - API** | 无 | 无变更 | 无 | 复用现有文件读取 API | | **后端 - 缓存** | 待定 | 后续新增 | 低 | 后续优化阶段实现 | | **后端 - 限流** | 待定 | 后续新增 | 低 | 后续优化阶段实现 | ## 2. API 影响 ### 新增端点 无 ### 修改端点 无(复用现有 API) ### 现有端点依赖 | 端点 | 变更 | 是否破坏性 | 备注 | |------|------|-----------|------| | `GET /api/v1/reviews/{id}/file?path={filePath}` | 无变更 | 否 | 前端根据响应内容渲染 | | `GET /api/v1/skills/{namespace}/{slug}/versions/{version}/file?path={filePath}` | 无变更 | 否 | 前端根据响应内容渲染 | ## 3. 数据库影响 ### 模式变更 无 ### 数据迁移 无 ## 4. 前端影响 ### 受影响页面 | 页面 | 影响描述 | 测试重点 | |------|---------|---------| | 技能详情页 | 文件预览弹窗增强 | 各种文件类型渲染测试 | | 审核详情页 | 文件预览弹窗增强 | 各种文件类型渲染测试 | ### i18n 变更 无新增翻译键(复用现有错误提示) ### 路由变更 无 ## 5. 风险评估 | 风险 ID | 描述 | 概率 | 影响 | 缓解措施 | |---------|------|------|------|---------| | R-001 | 大文件语法高亮导致浏览器卡顿 | 中 | 高 | 设置 500KB 阈值,超过则不高亮 | | R-002 | highlight.js 包体积过大 | 低 | 中 | 按需导入语言包,初始只加载核心 | | R-003 | 语法高亮样式与 Markdown 不一致 | 低 | 中 | 复用相同的 CSS 类名和样式 | | R-004 | 某些语言无法识别 | 低 | 低 | 降级到纯文本显示,不报错 | | R-005 | 渲染失败导致页面崩溃 | 低 | 高 | 使用 Error Boundary 捕获错误 | | R-006 | 主题切换时样式闪烁 | 低 | 低 | 使用 CSS 变量,确保平滑过渡 | | R-007 | 后端文件读取性能下降 | 中 | 中 | 后续实现缓存和限流(不在本次范围) | | R-008 | XSS 安全风险 | 低 | 高 | 确保 highlight.js 输出已转义 | ### 风险详细说明 #### R-001: 大文件语法高亮导致浏览器卡顿 - **触发条件**:用户尝试预览 > 500KB 的代码文件 - **影响范围**:前端渲染性能,用户体验 - **缓解措施**: 1. 设置 500KB 阈值,超过则显示纯文本 2. 增加 loading 状态提示用户 3. 提供"取消加载"按钮(后续优化) - **监控指标**:前端渲染时间(通过 RUM) #### R-005: 渲染失败导致页面崩溃 - **触发条件**:highlight.js 渲染异常、内存不足 - **影响范围**:文件预览功能不可用 - **缓解措施**: 1. 使用 React Error Boundary 捕获渲染错误 2. 降级到纯文本显示 3. 记录错误日志,便于排查 - **监控指标**:错误率(通过前端错误监控) #### R-007: 后端文件读取性能下降 - **触发条件**:大量用户同时预览文件 - **影响范围**:后端 API 响应时间增加,云存储 API 配额消耗 - **缓解措施**: 1. 后续实现 Redis 缓存(缓存命中率 > 60%) 2. 后续实现限流(认证用户 60 次/分钟,匿名 20 次/分钟) 3. 监控云存储 API 调用次数 - **监控指标**:API 响应时间、缓存命中率、限流触发次数 #### R-008: XSS 安全风险 - **触发条件**:恶意用户上传包含 XSS 代码的文件 - **影响范围**:安全漏洞,可能导致用户信息泄露 - **缓解措施**: 1. 确保 highlight.js 输出已转义(highlight.js 默认转义) 2. 代码审查确认 `dangerouslySetInnerHTML` 使用安全 3. 不允许用户自定义语法高亮规则 - **监控指标**:安全审查通过 ## 6. 测试影响 ### 新增测试 | 测试类 | 覆盖用例 | 描述 | |--------|---------|------| | `CodeRenderer.test.tsx` | AC-P-001 ~ AC-P-005 | CodeRenderer 组件单元测试 | | `file-type-utils.test.ts` | AC-P-006 | 语言映射函数测试 | | `file-preview-dialog.test.tsx` | AC-P-007 ~ AC-P-010 | 文件预览弹窗集成测试 | ### 修改测试 | 测试类 | 修改原因 | 描述 | |--------|---------|------| | `file-preview-dialog.test.tsx` | 新增渲染逻辑 | 更新快照,增加语法高亮测试用例 | ## 7. 部署影响 ### 前端部署 - **构建时间**:预计增加 10-20 秒(新增组件编译) - **包体积**:预计增加 50-80KB(gzipped,按需导入语言包) - **缓存失效**:文件预览相关页面缓存失效,需重新加载 ### 后端部署 - **本次无变更** - **后续优化**:需要部署缓存和限流逻辑(独立任务) ### 数据库部署 无 ## 8. 回滚计划 ### 回滚触发条件 - 前端渲染错误率 > 5% - 用户投诉语法高亮功能异常 > 10 次/天 - 性能指标严重下降(P95 响应时间 > 3s) ### 回滚步骤 1. **前端回滚**: - 回滚到上一个稳定版本(git revert) - 重新构建和部署前端 - 验证文件预览功能恢复正常(显示纯文本) 2. **监控验证**: - 确认错误率恢复正常 - 确认性能指标恢复正常 3. **问题排查**: - 分析错误日志,定位问题根因 - 修复问题后重新部署 ### 回滚影响 - 用户将无法使用语法高亮功能,回退到纯文本显示 - 不影响文件下载和其他核心功能 --- ## 变更日志 | 日期 | 章节 | 变更 | 原因 | 触发者 | |------|------|------|------|--------| | 2026-03-22 | 初始版本 | 创建影响分析文档 | 需求澄清完成 | requirements-clarity |