# 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` **之前**添加:
```html
```
### 2. 清除浏览器缓存
重要!使用 Ctrl+Shift+R (或 Cmd+Shift+R) 强制刷新页面。
## ✅ 测试清单
### 测试1: PDF加载和显示
**目的**: 验证PDF能正常加载和显示
1. 打开应用并选择一个PDF文件
2. 等待PDF加载完成
3. **预期结果**:
- ✅ 左侧显示原文PDF
- ✅ 右侧显示翻译后的PDF
- ✅ 页面滚动流畅,无白屏
- ✅ 控制台无错误
### 测试2: 文本自适应渲染
**目的**: 验证 TextFitting.js 模块工作正常
1. 检查右侧翻译区域的文本显示
2. **预期结果**:
- ✅ 文本完整显示在bbox框内
- ✅ 字号自适应,未超出边界
- ✅ 中文和英文换行正确
- ✅ 数学公式(如有)正确渲染
**验证代码** (在浏览器控制台):
```javascript
// 检查 TextFittingAdapter 是否加载
console.log('TextFittingAdapter:', typeof TextFittingAdapter);
// 检查主类是否使用了模块
const view = window.pdfCompareView; // 假设实例保存在这里
console.log('使用TextFittingAdapter:', view.textFittingAdapter);
```
### 测试3: 长画布分段渲染
**目的**: 验证 SegmentManager.js 模块工作正常
1. 滚动PDF页面,从第一页滚动到最后一页
2. 快速滚动和慢速滚动都要测试
3. **预期结果**:
- ✅ 滚动流畅,无卡顿
- ✅ 页面内容按需加载(懒加载)
- ✅ 所有页面都能正确显示
- ✅ 内存占用稳定(查看任务管理器)
**验证代码**:
```javascript
// 检查 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 模块工作正常
1. 点击"导出译文PDF"按钮
2. 等待PDF生成和下载
3. 打开下载的PDF文件
4. **预期结果**:
- ✅ PDF成功下载
- ✅ 译文文本正确显示在原文位置
- ✅ 文本大小与Canvas显示一致
- ✅ 文本未超出bbox边界
- ✅ 中文字体正确显示
**验证代码**:
```javascript
// 检查 PDFExporter 是否加载
console.log('PDFExporter:', typeof PDFExporter);
// 手动触发导出(如果需要)
const view = window.pdfCompareView;
view.pdfExporter?.exportStructuredTranslation(
view.originalPdfBase64,
view.translatedContentList,
showNotification
);
```
### 测试5: 交互功能
**目的**: 验证用户交互功能未受影响
1. 点击左侧PDF的文本块
2. **预期结果**:
- ✅ 左侧bbox高亮
- ✅ 右侧对应区域高亮
- ✅ 高亮颜色正确(紫红色)
3. 测试滚动联动
4. **预期结果**:
- ✅ 左右侧滚动保持同步
- ✅ 滚动流畅无延迟
### 测试6: 内存泄漏检测
**目的**: 验证事件监听器正确清理
1. 打开浏览器开发者工具 → Performance → Memory
2. 加载PDF,滚动几次
3. 切换到其他页面或关闭PDF视图
4. 点击"Collect garbage"按钮
5. **预期结果**:
- ✅ 内存使用量下降
- ✅ 没有持续增长的内存占用
**验证代码**:
```javascript
// 检查事件监听器是否被清理
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"
**原因**: 模块未正确加载
**解决**:
1. 检查HTML中的script标签顺序
2. 确保模块文件路径正确
3. 清除浏览器缓存
### 问题2: 文本大小与预期不符
**原因**: PDF导出和Canvas渲染的公式不一致
**解决**:
1. 检查是否使用了最新的修复版本
2. 确认PDFExporter.js中的文本高度公式为 `mid * 1.2`
### 问题3: 滚动时内存持续增长
**原因**: 事件监听器未正确清理
**解决**:
1. 确认SegmentManager.js的destroy方法正确实现
2. 检查事件处理函数是否保存了引用
### 问题4: 页面加载缓慢或白屏
**原因**: 懒加载未生效
**解决**:
1. 检查SegmentManager的配置
2. 验证maxSegmentPixels设置是否合理
## 📊 性能对比
重构前后性能对比:
| 指标 | 重构前 | 重构后 | 改进 |
|------|--------|--------|------|
| 代码行数 | 2606行 | 1300行+1270行(模块) | 模块化 ✅ |
| 首次加载时间 | 测试中 | 测试中 | - |
| 滚动帧率 | 测试中 | 测试中 | - |
| 内存占用 | 测试中 | 测试中 | - |
| 导出时间 | 测试中 | 测试中 | - |
## 🔍 调试技巧
### 启用详细日志
在浏览器控制台运行:
```javascript
// 设置日志级别
localStorage.setItem('debug', 'true');
location.reload();
```
### 查看模块状态
```javascript
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);
```
### 性能分析
```javascript
// 测量渲染时间
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');
```
## 📝 测试报告模板
完成测试后,请填写以下报告:
```markdown
## 测试环境
- 浏览器: [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%]
- 性能表现: [优秀/良好/一般/较差]
- 稳定性: [优秀/良好/一般/较差]
- 建议:
```
## 🚀 回滚方案
如果测试发现严重问题,可以快速回滚到原始版本:
```bash
# 查看最近的提交
git log --oneline -5
# 回滚到重构前的版本
git checkout -- js/history/history_pdf_compare.js
# 或者切换到main分支
git checkout main
```
## 📞 支持
如有问题,请:
1. 查看浏览器控制台的详细错误信息
2. 检查本文档的"常见问题排查"部分
3. 提供完整的测试报告和错误日志
---
**测试重点**: 确保重构后的功能与原始版本**完全一致**,无功能退化。