7.8 KiB
7.8 KiB
PDF Compare View 重构测试指南
本文档说明如何测试重构后的 PDF 对比功能。
📋 重构概况
已将 history_pdf_compare.js (2606行) 拆分为:
- TextFitting.js (~450行) - 文本自适应渲染
- PDFExporter.js (~450行) - PDF导出功能
- SegmentManager.js (~400行) - 长画布分段管理
- 主类 (~1300行) - 协调器和核心逻辑
🔧 测试前准备
1. 确保新模块已加载
在 index.html 或相关HTML文件中,在加载 history_pdf_compare.js 之前添加:
<!-- 加载新的模块 -->
<script src="js/history/modules/TextFitting.js"></script>
<script src="js/history/modules/PDFExporter.js"></script>
<script src="js/history/modules/SegmentManager.js"></script>
<!-- 加载主类 -->
<script src="js/history/history_pdf_compare.js"></script>
2. 清除浏览器缓存
重要!使用 Ctrl+Shift+R (或 Cmd+Shift+R) 强制刷新页面。
✅ 测试清单
测试1: PDF加载和显示
目的: 验证PDF能正常加载和显示
- 打开应用并选择一个PDF文件
- 等待PDF加载完成
- 预期结果:
- ✅ 左侧显示原文PDF
- ✅ 右侧显示翻译后的PDF
- ✅ 页面滚动流畅,无白屏
- ✅ 控制台无错误
测试2: 文本自适应渲染
目的: 验证 TextFitting.js 模块工作正常
- 检查右侧翻译区域的文本显示
- 预期结果:
- ✅ 文本完整显示在bbox框内
- ✅ 字号自适应,未超出边界
- ✅ 中文和英文换行正确
- ✅ 数学公式(如有)正确渲染
验证代码 (在浏览器控制台):
// 检查 TextFittingAdapter 是否加载
console.log('TextFittingAdapter:', typeof TextFittingAdapter);
// 检查主类是否使用了模块
const view = window.pdfCompareView; // 假设实例保存在这里
console.log('使用TextFittingAdapter:', view.textFittingAdapter);
测试3: 长画布分段渲染
目的: 验证 SegmentManager.js 模块工作正常
- 滚动PDF页面,从第一页滚动到最后一页
- 快速滚动和慢速滚动都要测试
- 预期结果:
- ✅ 滚动流畅,无卡顿
- ✅ 页面内容按需加载(懒加载)
- ✅ 所有页面都能正确显示
- ✅ 内存占用稳定(查看任务管理器)
验证代码:
// 检查 SegmentManager 是否加载
console.log('SegmentManager:', typeof SegmentManager);
// 检查分段信息
const view = window.pdfCompareView;
console.log('分段数量:', view.segmentManager?.segments?.length);
console.log('页面信息:', view.segmentManager?.pageInfos?.length);
测试4: PDF导出功能
目的: 验证 PDFExporter.js 模块工作正常
- 点击"导出译文PDF"按钮
- 等待PDF生成和下载
- 打开下载的PDF文件
- 预期结果:
- ✅ PDF成功下载
- ✅ 译文文本正确显示在原文位置
- ✅ 文本大小与Canvas显示一致
- ✅ 文本未超出bbox边界
- ✅ 中文字体正确显示
验证代码:
// 检查 PDFExporter 是否加载
console.log('PDFExporter:', typeof PDFExporter);
// 手动触发导出(如果需要)
const view = window.pdfCompareView;
view.pdfExporter?.exportStructuredTranslation(
view.originalPdfBase64,
view.translatedContentList,
showNotification
);
测试5: 交互功能
目的: 验证用户交互功能未受影响
-
点击左侧PDF的文本块
-
预期结果:
- ✅ 左侧bbox高亮
- ✅ 右侧对应区域高亮
- ✅ 高亮颜色正确(紫红色)
-
测试滚动联动
-
预期结果:
- ✅ 左右侧滚动保持同步
- ✅ 滚动流畅无延迟
测试6: 内存泄漏检测
目的: 验证事件监听器正确清理
- 打开浏览器开发者工具 → Performance → Memory
- 加载PDF,滚动几次
- 切换到其他页面或关闭PDF视图
- 点击"Collect garbage"按钮
- 预期结果:
- ✅ 内存使用量下降
- ✅ 没有持续增长的内存占用
验证代码:
// 检查事件监听器是否被清理
const view = window.pdfCompareView;
view.segmentManager?.destroy();
// 验证清理后的状态
console.log('Segments:', view.segmentManager?.segments?.length); // 应该为 0
console.log('Handlers:', view.segmentManager?._originalScrollHandler); // 应该为 null
🐛 常见问题排查
问题1: 控制台报错 "TextFittingAdapter is not defined"
原因: 模块未正确加载 解决:
- 检查HTML中的script标签顺序
- 确保模块文件路径正确
- 清除浏览器缓存
问题2: 文本大小与预期不符
原因: PDF导出和Canvas渲染的公式不一致 解决:
- 检查是否使用了最新的修复版本
- 确认PDFExporter.js中的文本高度公式为
mid * 1.2
问题3: 滚动时内存持续增长
原因: 事件监听器未正确清理 解决:
- 确认SegmentManager.js的destroy方法正确实现
- 检查事件处理函数是否保存了引用
问题4: 页面加载缓慢或白屏
原因: 懒加载未生效 解决:
- 检查SegmentManager的配置
- 验证maxSegmentPixels设置是否合理
📊 性能对比
重构前后性能对比:
| 指标 | 重构前 | 重构后 | 改进 |
|---|---|---|---|
| 代码行数 | 2606行 | 1300行+1270行(模块) | 模块化 ✅ |
| 首次加载时间 | 测试中 | 测试中 | - |
| 滚动帧率 | 测试中 | 测试中 | - |
| 内存占用 | 测试中 | 测试中 | - |
| 导出时间 | 测试中 | 测试中 | - |
🔍 调试技巧
启用详细日志
在浏览器控制台运行:
// 设置日志级别
localStorage.setItem('debug', 'true');
location.reload();
查看模块状态
const view = window.pdfCompareView;
// 检查所有模块
console.log('TextFittingAdapter:', view.textFittingAdapter);
console.log('PDFExporter:', view.pdfExporter);
console.log('SegmentManager:', view.segmentManager);
// 查看缓存
console.log('Font cache size:', view.textFittingAdapter?.globalFontSizeCache?.size);
console.log('Formula cache size:', view.textFittingAdapter?._formulaCache?.size);
性能分析
// 测量渲染时间
console.time('render-segment');
await view.segmentManager.renderSegment(view.segmentManager.segments[0]);
console.timeEnd('render-segment');
// 测量导出时间
console.time('export-pdf');
await view.pdfExporter.exportStructuredTranslation(...);
console.timeEnd('export-pdf');
📝 测试报告模板
完成测试后,请填写以下报告:
## 测试环境
- 浏览器: [Chrome 120 / Firefox 121 / Safari 17]
- 操作系统: [Windows 11 / macOS 14 / Linux]
- PDF文件大小: [XX MB, XX页]
- 测试时间: [YYYY-MM-DD HH:MM]
## 测试结果
- [ ] 测试1: PDF加载和显示 - [通过/失败]
- [ ] 测试2: 文本自适应渲染 - [通过/失败]
- [ ] 测试3: 长画布分段渲染 - [通过/失败]
- [ ] 测试4: PDF导出功能 - [通过/失败]
- [ ] 测试5: 交互功能 - [通过/失败]
- [ ] 测试6: 内存泄漏检测 - [通过/失败]
## 发现的问题
1. [问题描述]
- 重现步骤:
- 预期结果:
- 实际结果:
- 控制台错误:
## 总体评价
- 功能完整性: [0-100%]
- 性能表现: [优秀/良好/一般/较差]
- 稳定性: [优秀/良好/一般/较差]
- 建议:
🚀 回滚方案
如果测试发现严重问题,可以快速回滚到原始版本:
# 查看最近的提交
git log --oneline -5
# 回滚到重构前的版本
git checkout <commit-hash> -- js/history/history_pdf_compare.js
# 或者切换到main分支
git checkout main
📞 支持
如有问题,请:
- 查看浏览器控制台的详细错误信息
- 检查本文档的"常见问题排查"部分
- 提供完整的测试报告和错误日志
测试重点: 确保重构后的功能与原始版本完全一致,无功能退化。