yinji/docs/DEVELOPMENT_PLAN.md
wenpai 9587cd8ef4 feat: Sprint 1-3 安全修复、状态管理重构、性能优化
Sprint 1 - 安全基线修复(5项):
- 修复 DOM XSS 漏洞(seal-library.js, batch-processing.js)
- 修复 settings 导入 schema 注入
- CDN 锁版本 + SRI 完整性校验
- 外链添加 rel="noopener noreferrer"
- 替换 confirm/prompt 为自定义对话框

Sprint 2 - 状态管理重构(4项):
- 新建 state.js 单例模式管理全局状态
- 解耦 window.* 全局变量
- 修复印章库状态同步 bug
- localStorage 添加错误处理

Sprint 3 - 性能优化(4项):
- 删除死代码(loadScript, cleanupDistantCanvases 等)
- 实现缩略图懒加载(前3页+可视区)
- 添加文件大小限制(PDF 50MB / 图片 5MB)
- 完善 Canvas 内存清理

修复总计: 13项(3 P0 + 3 P1 + 6 P2 + 1 P3)

[CC] [CX]
2026-03-28 13:45:52 +08:00

439 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PDF Stamper 开发计划
**项目名称**PDF Stamper - 现代化 PDF 盖章工具
**当前版本**v1.0.0
**计划版本**v2.0.0
**制定日期**2026-01-07
**开发策略**:渐进式改进(方案 A
---
## 📊 项目现状评估
### 当前评分6.5/10
| 维度 | 评分 | 说明 |
|------|------|------|
| 功能完整性 | 8/10 | 核心功能完备,缺少高级特性 |
| 代码质量 | 5/10 | 单文件架构,全局状态,需重构 |
| 性能表现 | 5/10 | 大文件卡顿,内存泄漏 |
| 用户体验 | 7/10 | UI 现代,但缺少反馈和移动端支持 |
| 安全性 | 6/10 | 无文件大小限制,缺少 SRI |
| 可维护性 | 5/10 | 760 行单文件,无测试 |
### 核心问题
**Critical阻塞性问题**
- ❌ 大文件性能问题(>50 页 PDF 卡顿)
- ❌ 内存泄漏Canvas 和事件监听未清理)
- ❌ 无文件大小限制(可能导致浏览器崩溃)
- ❌ 单文件架构760 行,难以维护)
**High高优先级**
- ⚠️ 用户反馈不友好(使用 alert
- ⚠️ 无加载指示器
- ⚠️ 无撤销/重做功能
- ⚠️ 移动端不可用
---
## 🎯 开发目标
### 短期目标v1.1.0 - 2 周)
解决关键性能和用户体验问题,使应用稳定可用
### 中期目标v1.5.0 - 4 周)
模块化重构,添加核心功能,提升可维护性
### 长期目标v2.0.0 - 8 周)
完整的功能集,企业级质量,移动端支持
---
## 📅 开发路线图
### Phase 1: 紧急修复(第 1-2 周)
**目标**:解决阻塞性问题,提升稳定性
#### Week 1: 性能优化与错误处理
**Day 1-2: 文件限制与验证**
- [ ] 添加 PDF 文件大小限制50MB
- [ ] 添加图片文件大小限制5MB
- [ ] 添加页数限制500 页)
- [ ] 实现文件类型验证
- [ ] 添加图片尺寸验证
**Day 3-4: 懒加载实现**
- [ ] 重构页面渲染逻辑
- [ ] 实现按需创建 Canvas
- [ ] 只渲染当前页 + 前后各 1 页
- [ ] 优化缩略图生成(降低分辨率)
- [ ] 测试大文件性能100+ 页)
**Day 5: 内存泄漏修复**
- [ ] 实现 Canvas 销毁方法
- [ ] 清理事件监听器
- [ ] 释放图片资源revoke ObjectURL
- [ ] 添加页面切换时的清理逻辑
#### Week 2: 用户体验改进
**Day 1-2: 通知系统**
- [ ] 创建 Toast 通知组件
- [ ] 替换所有 alert() 调用
- [ ] 添加成功/错误/警告样式
- [ ] 实现自动消失和手动关闭
**Day 3-4: 加载指示器**
- [ ] 创建 Loading 组件
- [ ] PDF 加载时显示进度
- [ ] 导出时显示进度条
- [ ] 添加操作反馈动画
**Day 5: 测试与修复**
- [ ] 完整功能测试
- [ ] 修复发现的 Bug
- [ ] 性能测试(不同大小 PDF
- [ ] 发布 v1.1.0
**交付物**
- ✅ 稳定的性能(支持 100 页 PDF
- ✅ 友好的用户反馈
- ✅ 无内存泄漏
- ✅ 文件大小保护
---
### Phase 2: 功能增强(第 3-4 周)
**目标**:添加核心功能,提升用户体验
#### Week 3: 撤销/重做与印章管理
**Day 1-3: 撤销/重做系统**
- [ ] 设计命令模式架构
- [ ] 实现历史记录栈
- [ ] 添加撤销/重做按钮
- [ ] 实现键盘快捷键Ctrl+Z / Ctrl+Y
- [ ] 限制历史记录数量(最多 50 步)
**Day 4-5: 印章库功能**
- [ ] 设计印章存储结构LocalStorage
- [ ] 实现印章保存功能
- [ ] 创建印章库 UI
- [ ] 实现快速选择印章
- [ ] 添加印章删除功能
#### Week 4: 高级功能
**Day 1-2: 印章透明度控制**
- [ ] 添加透明度滑块
- [ ] 实时预览透明度
- [ ] 应用到普通章和骑缝章
- [ ] 保存透明度设置
**Day 3-4: 键盘快捷键**
- [ ] 实现快捷键系统
- [ ] 添加常用操作快捷键
- Delete/Backspace: 删除
- Ctrl+Z: 撤销
- Ctrl+Y: 重做
- Ctrl+S: 导出
- Arrow keys: 微调位置
- [ ] 创建快捷键帮助面板
**Day 5: 测试与发布**
- [ ] 功能测试
- [ ] 用户体验测试
- [ ] 发布 v1.5.0
**交付物**
- ✅ 撤销/重做功能
- ✅ 印章库管理
- ✅ 印章透明度控制
- ✅ 键盘快捷键
---
### Phase 3: 架构重构(第 5-6 周)
**目标**:模块化代码,提升可维护性
#### Week 5: 代码拆分
**Day 1-2: 状态管理模块**
```
src/modules/state.js
- 集中管理全局状态
- 实现状态订阅机制
- 添加状态验证
```
**Day 2-3: 核心功能模块**
```
src/modules/
├── pdf-loader.js # PDF 加载与解析
├── stamp-manager.js # 印章管理逻辑
├── canvas-manager.js # Canvas 操作封装
└── exporter.js # PDF 导出功能
```
**Day 4-5: UI 组件模块**
```
src/ui/
├── notifications.js # 通知系统
├── loading.js # 加载指示器
├── toolbar.js # 工具栏交互
└── sidebar.js # 侧边栏管理
```
#### Week 6: 工具与测试
**Day 1-2: 工具函数**
```
src/utils/
├── validators.js # 输入验证
├── image-utils.js # 图片处理
├── constants.js # 常量配置
└── helpers.js # 辅助函数
```
**Day 3-4: 单元测试**
- [ ] 设置测试环境Vitest
- [ ] 编写核心函数测试
- [ ] 验证器测试
- [ ] 状态管理测试
**Day 5: 重构完成**
- [ ] 代码审查
- [ ] 性能对比测试
- [ ] 文档更新
- [ ] 发布 v1.8.0
**交付物**
- ✅ 模块化代码结构
- ✅ 单元测试覆盖
- ✅ 更好的可维护性
---
### Phase 4: 移动端与高级功能(第 7-8 周)
**目标**:移动端支持,企业级功能
#### Week 7: 响应式设计
**Day 1-3: 移动端适配**
- [ ] 响应式布局重构
- [ ] 触摸手势支持
- [ ] 移动端工具栏优化
- [ ] 侧边栏抽屉式设计
**Day 4-5: 批量操作**
- [ ] 多页选择功能
- [ ] 批量添加印章
- [ ] 批量删除印章
- [ ] 批量导出
#### Week 8: 高级功能与发布
**Day 1-2: 高级编辑**
- [ ] 印章精确定位(坐标输入)
- [ ] 印章复制/粘贴
- [ ] 印章对齐辅助线
- [ ] 印章锁定功能
**Day 3-4: 安全增强**
- [ ] 添加 CDN SRI 哈希
- [ ] 文件名安全处理
- [ ] 添加 CSP 策略
- [ ] 安全审计
**Day 5: v2.0.0 发布**
- [ ] 完整测试
- [ ] 性能基准测试
- [ ] 文档完善
- [ ] 正式发布
**交付物**
- ✅ 移动端完整支持
- ✅ 批量操作功能
- ✅ 高级编辑功能
- ✅ 企业级安全性
---
## 🛠️ 技术栈
### 保持不变
- 纯 HTML/CSS/JavaScript无构建工具
- PDF.jsPDF 渲染)
- Fabric.jsCanvas 操作)
- pdf-libPDF 导出)
### 新增工具
- Vitest单元测试- 可选
- ESLint代码规范- 可选
- Prettier代码格式化- 可选
---
## 📏 成功指标
### 性能指标
- [ ] 100 页 PDF 加载时间 < 3 秒
- [ ] 页面切换响应 < 100ms
- [ ] 导出 50 页 PDF < 5 秒
- [ ] 内存使用稳定(无泄漏)
### 用户体验指标
- [ ] 所有操作有明确反馈
- [ ] 移动端可正常使用
- [ ] 支持键盘操作
- [ ] 错误提示清晰友好
### 代码质量指标
- [ ] 单文件代码 < 300 行
- [ ] 核心函数测试覆盖率 > 70%
- [ ] 无 ESLint 错误
- [ ] 代码注释覆盖率 > 50%
---
## 🚨 风险与应对
### 技术风险
**风险 1模块化后性能下降**
- 应对:保持模块轻量,避免过度抽象
- 监控:每次重构后进行性能对比测试
**风险 2懒加载导致用户体验问题**
- 应对:预加载相邻页面,添加加载动画
- 监控:测试不同网络条件下的表现
**风险 3兼容性问题**
- 应对:保持浏览器兼容性测试
- 监控:支持主流浏览器最近 2 个版本
### 项目风险
**风险 4开发时间超期**
- 应对:优先完成 Phase 1-2Phase 3-4 可延后
- 监控:每周评估进度,及时调整
**风险 5功能蔓延**
- 应对:严格按照计划执行,新需求记录到 backlog
- 监控:每个 Phase 结束时评审
---
## 📝 开发规范
### 代码规范
- 使用 ES6+ 语法
- 函数单一职责,长度 < 50 行
- 必须添加 JSDoc 注释
- 变量命名清晰camelCase
- 常量使用 UPPER_SNAKE_CASE
### Git 提交规范
```
feat: 新功能
fix: Bug 修复
refactor: 重构
perf: 性能优化
docs: 文档更新
test: 测试相关
chore: 构建/工具相关
```
### 测试规范
- 核心功能必须有单元测试
- 每个 Phase 结束前完整测试
- 性能测试使用标准 PDF 文件
---
## 📦 交付清单
### v1.1.0(第 2 周)
- [x] 文件大小限制
- [x] 懒加载实现
- [x] 内存泄漏修复
- [x] Toast 通知系统
- [x] 加载指示器
### v1.5.0(第 4 周)
- [ ] 撤销/重做功能
- [ ] 印章库管理
- [ ] 印章透明度
- [ ] 键盘快捷键
### v1.8.0(第 6 周)
- [ ] 模块化架构
- [ ] 单元测试
- [ ] 代码文档
### v2.0.0(第 8 周)
- [ ] 移动端支持
- [ ] 批量操作
- [ ] 高级编辑
- [ ] 安全增强
---
## 🔄 迭代策略
### 每周迭代
1. **周一**:计划本周任务
2. **周二-周四**:开发实现
3. **周五**:测试、修复、代码审查
4. **周末**:可选的探索性开发
### 每个 Phase 结束
1. 完整功能测试
2. 性能基准测试
3. 用户体验评审
4. 发布版本
5. 收集反馈
---
## 📚 参考资源
### 技术文档
- [PDF.js Documentation](https://mozilla.github.io/pdf.js/)
- [Fabric.js Documentation](http://fabricjs.com/docs/)
- [pdf-lib Documentation](https://pdf-lib.js.org/)
### 最佳实践
- [JavaScript Clean Code](https://github.com/ryanmcdermott/clean-code-javascript)
- [Web Performance Best Practices](https://web.dev/performance/)
- [Accessibility Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
---
## 🎯 下一步行动
**立即开始**Phase 1 - Week 1 - Day 1
- 创建 `src/utils/validators.js`
- 实现文件大小验证
- 添加错误提示
**命令**
```bash
# 创建目录结构
mkdir -p src/{modules,ui,utils}
# 开始开发
# 从 validators.js 开始
```
---
**最后更新**2026-01-07
**负责人**:开发团队
**审核人**:项目负责人