diff --git a/PWA后台优化完整实施报告.md b/PWA后台优化完整实施报告.md deleted file mode 100644 index cdd45496..00000000 --- a/PWA后台优化完整实施报告.md +++ /dev/null @@ -1,276 +0,0 @@ -# PWA后台优化完整实施报告 - -## 项目概述 -本次优化针对MoviePilot PWA应用在iOS设备上频繁被系统杀掉后台进程的问题,通过全面优化SSE连接和定时器管理,显著提升应用在后台的生存能力。 - -## 核心优化工具 - -### 1. 后台管理器 (`src/utils/backgroundManager.ts`) -- **功能**: 统一管理所有定时器的生命周期 -- **特性**: - - 自动检测应用前台/后台状态 - - 后台时自动暂停定时器,前台时恢复 - - 提供定时器状态监控和调试接口 - - 支持用户活跃状态检测 - -### 2. SSE管理器 (`src/utils/sseManager.ts`) -- **功能**: 优化SSE连接管理 -- **特性**: - - 后台5秒后自动关闭连接 - - 前台时自动重连 - - 连接错误自动重试 - - 防止连接泄露 - -### 3. 组合函数 (`src/composables/useBackgroundOptimization.ts`) -- **提供的功能**: - - `useSSE`: 基础SSE连接管理 - - `useDelayedSSE`: 延迟启动的SSE连接 - - `useProgressSSE`: 进度监听专用SSE - - `useTimer`: 优化的定时器 - - `useDataRefresh`: 数据刷新定时器 - -## 完成的组件优化 - -### SSE连接优化(8个组件) - -#### 1. UserNotification.vue -- **优化前**: 永久SSE连接监听用户通知 -- **优化后**: 使用`useDelayedSSE`,3秒延迟启动,后台自动关闭 -- **影响**: 减少后台网络活动,提升电池续航 - -#### 2. MessageView.vue -- **优化前**: 永久SSE连接监听消息 -- **优化后**: 使用`useSSE`管理连接生命周期 -- **影响**: 后台时自动断开连接,前台时重连 - -#### 3. LoggingView.vue -- **优化前**: 永久SSE连接监听日志 -- **优化后**: 使用优化的SSE管理器,保留缓冲区逻辑 -- **影响**: 后台时停止日志流,减少资源占用 - -#### 4. resource.vue -- **优化前**: 永久SSE连接监听搜索进度 -- **优化后**: 使用`useProgressSSE`,进度结束时自动关闭 -- **影响**: 避免无用的长期连接 - -#### 5. TransferQueueDialog.vue -- **优化前**: 对话框中的SSE连接监听传输进度 -- **优化后**: 使用`useProgressSSE`,后台自动暂停 -- **影响**: 对话框后台时不消耗资源 - -#### 6. FileList.vue -- **优化前**: 文件操作进度SSE连接 -- **优化后**: 使用`useProgressSSE`管理连接 -- **影响**: 文件操作后台时自动优化 - -#### 7. ReorganizeDialog.vue -- **优化前**: 整理进度SSE连接 -- **优化后**: 使用`useProgressSSE`,后台自动暂停 -- **影响**: 整理进度后台时不占用资源 - -#### 8. App.vue (主应用) -- **优化前**: 系统通知SSE连接 -- **优化后**: 已在前期优化中处理 -- **影响**: 主应用后台时减少网络活动 - -### 定时器优化(11个组件) - -#### 1. App.vue -- **优化前**: 10秒轮换背景图片 -- **优化后**: 使用`addBackgroundTimer`,后台时自动暂停 -- **影响**: 后台时停止图片轮换,节省内存和CPU - -#### 2. pwaStateManager.ts -- **优化前**: 30秒保存PWA状态 -- **优化后**: - - 间隔改为60秒 - - 后台时不保存 - - 添加活跃状态检测 -- **影响**: 减少50%的状态保存频率 - -#### 3. AnalyticsMemory.vue -- **优化前**: 2秒刷新内存使用数据 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时完全停止内存监控 - -#### 4. AnalyticsCpu.vue -- **优化前**: 2秒刷新CPU使用数据 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时完全停止CPU监控 - -#### 5. AnalyticsSpeed.vue -- **优化前**: 3秒刷新速度数据 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时完全停止速度监控 - -#### 6. DownloadingListView.vue -- **优化前**: 3秒刷新下载列表 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时停止下载状态查询 - -#### 7. AccountSettingService.vue -- **优化前**: 5秒刷新定时任务状态 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时停止服务状态查询 - -#### 8. AnalyticsProcesses.vue -- **优化前**: 5秒刷新进程列表 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时停止进程监控 - -#### 9. AnalyticsScheduler.vue -- **优化前**: 60秒刷新调度器状态 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时停止调度器状态查询 - -#### 10. AnalyticsNetwork.vue -- **优化前**: 2秒刷新网络流量数据 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时完全停止网络监控 - -#### 11. DownloaderCard.vue -- **优化前**: 3秒查询下载器状态 -- **优化后**: 使用`useDataRefresh`,后台自动暂停 -- **影响**: 后台时停止下载器状态查询 - -## 优化效果对比 - -### 资源占用改善 - -| 资源类型 | 优化前 | 优化后 | 改善幅度 | -|----------|--------|--------|----------| -| SSE连接数 | 8个永久连接 | 后台0个 | 100%减少 | -| 定时器数量 | 11个持续运行 | 后台0个 | 100%减少 | -| 网络请求频率 | 高频持续请求 | 后台完全停止 | 100%减少 | -| CPU使用率 | 持续消耗 | 后台极低 | 90%减少 | -| 内存使用 | 持续增长 | 后台稳定 | 60%改善 | - -### 具体数值对比 - -| 组件 | 优化前频率 | 优化后状态 | 节省资源 | -|------|------------|------------|----------| -| UserNotification | 永久连接 | 后台关闭 | 100% | -| MessageView | 永久连接 | 后台关闭 | 100% | -| LoggingView | 永久连接 | 后台关闭 | 100% | -| 背景图片轮换 | 10秒/次 | 后台暂停 | 100% | -| PWA状态保存 | 30秒/次 | 60秒/次+后台暂停 | 50%+ | -| 内存监控 | 2秒/次 | 后台暂停 | 100% | -| CPU监控 | 2秒/次 | 后台暂停 | 100% | -| 速度监控 | 3秒/次 | 后台暂停 | 100% | -| 网络监控 | 2秒/次 | 后台暂停 | 100% | -| 下载列表 | 3秒/次 | 后台暂停 | 100% | -| 进程监控 | 5秒/次 | 后台暂停 | 100% | - -## 技术实现特色 - -### 1. 渐进式优化 -- 保持原有功能完整性 -- 可逐步部署,不影响现有功能 -- 向后兼容性良好 - -### 2. 智能状态管理 -- 自动检测前台/后台状态 -- 基于用户活跃度的智能调度 -- 状态切换时的平滑过渡 - -### 3. 资源自动清理 -- 应用卸载时自动清理所有后台资源 -- 防止内存泄漏和僵尸进程 -- 连接错误时的自动重试机制 - -### 4. 调试友好 -- 开发环境提供丰富的调试工具 -- 实时状态监控 -- 详细的日志记录 - -## 调试工具 - -### 开发环境调试命令 -```javascript -// 查看后台管理器状态 -window.debugBackground() - -// 查看所有定时器信息 -window.backgroundManager.getTimersInfo() - -// 查看SSE连接状态 -window.sseManagerSingleton.getConnectionsInfo() - -// 查看用户活跃状态 -window.backgroundManager.getActiveStatus() -``` - -### 生产环境监控 -- 性能指标实时监控 -- 资源使用情况统计 -- 异常情况自动报告 - -## 部署验证 - -### 1. 基础功能验证 -- ✅ 所有原有功能正常工作 -- ✅ 前台时数据实时更新 -- ✅ 后台时资源自动释放 -- ✅ 状态切换时平滑过渡 - -### 2. 性能验证 -- ✅ 后台时CPU使用率降低90% -- ✅ 后台时网络活动停止 -- ✅ 内存使用保持稳定 -- ✅ 电池续航明显改善 - -### 3. 兼容性验证 -- ✅ iOS设备兼容性良好 -- ✅ Android设备正常工作 -- ✅ 桌面浏览器功能完整 -- ✅ PWA安装后正常运行 - -## 预期效果 - -### 1. 后台生存能力 -- **预期提升**: 3-5倍 -- **主要改善**: 系统杀掉应用的概率大幅降低 -- **用户体验**: 从后台恢复时响应更快 - -### 2. 资源使用优化 -- **CPU使用**: 后台时降低90% -- **内存占用**: 后台时保持稳定 -- **网络流量**: 后台时完全停止 -- **电池续航**: 提升30-50% - -### 3. 系统稳定性 -- **内存泄漏**: 完全消除 -- **连接堆积**: 自动清理 -- **异常恢复**: 自动重试 -- **状态一致**: 保持同步 - -## 维护建议 - -### 1. 定期监控 -- 监控后台管理器状态 -- 检查SSE连接健康度 -- 统计资源使用情况 -- 收集用户反馈 - -### 2. 持续优化 -- 根据使用情况调整定时器间隔 -- 优化SSE重连策略 -- 改进状态检测逻辑 -- 添加更多调试工具 - -### 3. 功能扩展 -- 支持更多组件类型 -- 添加更智能的调度算法 -- 集成系统级别的优化 -- 提供更详细的性能分析 - -## 总结 - -本次PWA后台优化项目已全面完成,共优化了19个组件,包括8个SSE连接和11个定时器。通过建立完善的后台管理体系,实现了以下核心目标: - -1. **资源使用优化**: 后台时CPU使用率降低90%,网络活动完全停止 -2. **电池续航改善**: 预期提升30-50%的电池使用时间 -3. **系统稳定性**: 消除内存泄漏,防止连接堆积 -4. **用户体验提升**: 应用后台生存能力提升3-5倍 - -这套优化方案不仅解决了iOS设备上的后台杀掉问题,还为整个PWA应用建立了可持续的资源管理体系,为后续的功能扩展奠定了坚实基础。 \ No newline at end of file diff --git a/package.json b/package.json index ee40bc8a..02d4eac8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "moviepilot", - "version": "2.6.2", + "version": "2.6.3", "private": true, "type": "module", "bin": "dist/service.js", diff --git a/优化实施总结.md b/优化实施总结.md deleted file mode 100644 index 66f910f8..00000000 --- a/优化实施总结.md +++ /dev/null @@ -1,179 +0,0 @@ -# PWA 后台优化实施总结 - -## ✅ 已完成的优化 - -### 1. 核心优化工具已创建 - -#### SSE管理器 (`src/utils/sseManager.ts`) -- ✅ 自动检测前台/后台状态 -- ✅ 后台5秒后自动关闭连接 -- ✅ 前台时自动重连 -- ✅ 支持多个监听器管理 -- ✅ 连接错误自动重试 - -#### 后台管理器 (`src/utils/backgroundManager.ts`) -- ✅ 统一管理所有定时器 -- ✅ 后台时自动暂停定时器 -- ✅ 前台时自动恢复定时器 -- ✅ 用户活跃状态检测 -- ✅ 定时器状态监控 - -#### 组合函数 (`src/composables/useBackgroundOptimization.ts`) -- ✅ `useSSE` - 优化的SSE连接 -- ✅ `useDelayedSSE` - 延迟SSE连接 -- ✅ `useProgressSSE` - 进度监听SSE -- ✅ `useTimer` - 优化的定时器 -- ✅ `useDataRefresh` - 数据刷新定时器 - -### 2. SSE连接优化已完成 - -#### ✅ UserNotification.vue -- **原来**: 3秒延迟后创建EventSource,后台一直保持连接 -- **现在**: 使用`useDelayedSSE`,后台5秒后自动关闭,前台自动重连 -- **影响**: 减少后台网络活动80% - -#### ✅ MessageView.vue -- **原来**: 在loadMessages中启动SSE连接 -- **现在**: 使用`useSSE`管理连接生命周期 -- **影响**: 后台自动断开,减少资源消耗 - -#### ✅ LoggingView.vue -- **原来**: 直接创建EventSource,复杂的缓冲区处理 -- **现在**: 保持缓冲区逻辑,使用优化的SSE管理器 -- **影响**: 保持功能完整性的同时优化后台性能 - -#### ✅ resource.vue (搜索进度) -- **原来**: 直接创建EventSource监听搜索进度 -- **现在**: 使用`useProgressSSE`,进度结束时自动关闭 -- **影响**: 进度监听更高效,减少不必要的连接 - -### 3. 定时器优化已完成 - -#### ✅ App.vue (背景图片轮换) -- **原来**: 每10秒切换背景,使用setInterval -- **现在**: 使用`addBackgroundTimer`,后台时自动暂停 -- **影响**: 后台时停止图片处理,显著降低CPU使用 - -#### ✅ PWA状态管理器优化 -- **原来**: 每30秒保存状态 -- **现在**: 每60秒保存,后台时不保存 -- **影响**: 减少后台I/O操作50% - -#### ✅ AnalyticsMemory.vue -- **原来**: 每3秒刷新内存数据,使用setInterval -- **现在**: 使用`useDataRefresh`,后台时自动暂停 -- **影响**: 后台时停止API调用,减少服务器负载 - -#### ✅ AnalyticsCpu.vue -- **原来**: 每2秒刷新CPU数据 -- **现在**: 使用优化的数据刷新定时器 -- **影响**: 后台时不刷新,减少API请求频率 - -#### ✅ AnalyticsSpeed.vue -- **原来**: 每3秒刷新下载器数据 -- **现在**: 使用优化的数据刷新定时器 -- **影响**: 后台时暂停数据更新 - -### 4. 主应用初始化优化 - -#### ✅ main.ts 初始化 -- **新增**: 后台管理器初始化 -- **新增**: SSE管理器初始化 -- **新增**: 开发环境调试工具 -- **新增**: 应用卸载时的资源清理 - -## 📊 预期优化效果 - -### 立即收益 (已实现) -- **SSE连接优化**: 减少后台网络活动 80% -- **定时器优化**: 降低后台CPU使用率 60% -- **API调用优化**: 减少后台API请求 70% - -### 具体数值对比 - -| 项目 | 优化前 | 优化后 | 改善幅度 | -|------|--------|--------|----------| -| SSE连接数量 | 5个永久连接 | 后台0个,前台按需 | 100%减少 | -| 定时器频率 | 多个高频定时器 | 后台全部暂停 | 100%减少 | -| 状态保存频率 | 30秒 | 60秒+活跃检测 | 50%减少 | -| 背景图片轮换 | 后台继续运行 | 后台完全停止 | 100%减少 | -| 仪表盘刷新 | 后台持续刷新 | 后台完全停止 | 100%减少 | - -## 🔧 调试工具 - -### 开发环境调试 -在浏览器控制台中使用: -```javascript -// 查看后台管理器状态 -debugBackground() - -// 查看所有定时器信息 -window.backgroundManager.getTimersInfo() - -// 查看SSE连接状态 -window.sseManagerSingleton -``` - -## 🚀 部署验证 - -### 验证方法 -1. **后台切换测试** - - 切换到其他应用5秒以上 - - 回到PWA应用,观察是否快速恢复 - - 检查控制台SSE重连日志 - -2. **定时器暂停验证** - - 在开发工具中运行`debugBackground()` - - 切换到后台,再次运行查看定时器状态 - - 确认所有定时器都标记为"paused" - -3. **内存使用监控** - - 使用Chrome DevTools监控内存使用 - - 对比优化前后的内存增长曲线 - - 验证后台时内存使用趋于平稳 - -## 🎯 下一步优化建议 - -### 中优先级 (建议1-2周内完成) -1. **剩余SSE连接优化** - - TransferQueueDialog.vue - - FileList.vue中的进度监听 - - ReorganizeDialog.vue - -2. **剩余定时器优化** - - AccountSettingService.vue - - DownloadingListView.vue - - 其他dashboard组件 - -3. **Service Worker缓存优化** - - 后台时减少缓存操作 - - 优化网络请求处理策略 - -### 低优先级 (长期优化) -1. **生命周期监听器整合** -2. **PWA状态管理精简** -3. **性能监控增强** - -## 📋 验证清单 - -### ✅ 核心功能验证 -- [x] SSE连接在后台自动关闭 -- [x] 定时器在后台自动暂停 -- [x] 前台时所有功能正常恢复 -- [x] 用户体验无明显影响 -- [x] 控制台无错误信息 - -### ✅ 性能验证 -- [x] 后台内存使用稳定 -- [x] 后台网络活动显著减少 -- [x] 后台CPU使用率降低 -- [x] iOS设备后台存活时间延长 - -## 🔥 重要说明 - -1. **向后兼容**: 所有优化都保持了原有功能的完整性 -2. **渐进式优化**: 可以逐步部署,不影响现有功能 -3. **调试友好**: 开发环境提供了丰富的调试工具 -4. **自动清理**: 应用卸载时自动清理所有后台资源 - -这次优化预计可以显著提高PWA应用在iOS设备上的后台生存能力,减少被系统杀掉的概率。 \ No newline at end of file diff --git a/剩余组件优化补丁.md b/剩余组件优化补丁.md deleted file mode 100644 index d957b348..00000000 --- a/剩余组件优化补丁.md +++ /dev/null @@ -1,371 +0,0 @@ -# 剩余组件优化补丁 - -## 1. TransferQueueDialog.vue 优化 - -### 原始代码 (需要替换的部分) -```typescript -// 加载进度SSE -const progressEventSource = ref() - -// 使用SSE监听加载进度 -function startLoadingProgress() { - progressEventSource.value = new EventSource(`${import.meta.env.VITE_API_BASE_URL}system/progress/filetransfer`) - progressEventSource.value.onmessage = event => { - const progress = JSON.parse(event.data) - if (progress) { - progressText.value = progress.text - progressValue.value = progress.value - progressEnabled.value = progress.enable - } - } -} - -// 停止监听加载进度 -function stopLoadingProgress() { - progressEventSource.value?.close() -} -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useProgressSSE } = useBackgroundOptimization() - -// 进度是否激活 -const progressActive = ref(false) - -// 进度SSE消息处理函数 -function handleProgressMessage(event: MessageEvent) { - const progress = JSON.parse(event.data) - if (progress) { - progressText.value = progress.text - progressValue.value = progress.value - progressEnabled.value = progress.enable - } -} - -// 使用优化的进度SSE连接 -const progressSSE = useProgressSSE( - `${import.meta.env.VITE_API_BASE_URL}system/progress/filetransfer`, - handleProgressMessage, - 'transfer-queue-progress', - progressActive -) - -// 使用SSE监听加载进度 -function startLoadingProgress() { - progressActive.value = true - progressSSE.start() -} - -// 停止监听加载进度 -function stopLoadingProgress() { - progressActive.value = false - progressSSE.stop() -} -``` - -## 2. AccountSettingService.vue 优化 - -### 原始代码 (需要替换的部分) -```typescript -let refreshTimer: NodeJS.Timeout | null = null - -// 启动定时器 -refreshTimer = setInterval(() => { - loadServiceData() -}, 3000) - -// 组件卸载时停止定时器 -onUnmounted(() => { - if (refreshTimer) { - clearInterval(refreshTimer) - refreshTimer = null - } -}) -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useDataRefresh } = useBackgroundOptimization() - -// 使用优化的数据刷新定时器 -const { loading } = useDataRefresh( - 'account-service', - loadServiceData, - 3000, // 3秒间隔 - true // 立即执行 -) -``` - -## 3. DownloadingListView.vue 优化 - -### 原始代码 (需要替换的部分) -```typescript -let refreshTimer: NodeJS.Timeout | null = null - -onMounted(() => { - loadData() - refreshTimer = setInterval(() => { - loadData() - }, 3000) -}) - -onUnmounted(() => { - if (refreshTimer) { - clearInterval(refreshTimer) - refreshTimer = null - } -}) -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useDataRefresh } = useBackgroundOptimization() - -// 使用优化的数据刷新定时器 -const { loading } = useDataRefresh( - 'downloading-list', - loadData, - 3000, // 3秒间隔 - true // 立即执行 -) -``` - -## 4. AnalyticsScheduler.vue 优化 - -### 原始代码 (需要替换的部分) -```typescript -let refreshTimer: NodeJS.Timeout | null = null - -onMounted(() => { - loadSchedulerData() - refreshTimer = setInterval(() => { - loadSchedulerData() - }, 3000) -}) - -onUnmounted(() => { - if (refreshTimer) { - clearInterval(refreshTimer) - refreshTimer = null - } -}) -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useDataRefresh } = useBackgroundOptimization() - -// 使用优化的数据刷新定时器 -const { loading } = useDataRefresh( - 'analytics-scheduler', - loadSchedulerData, - 3000, // 3秒间隔 - true // 立即执行 -) -``` - -## 5. AnalyticsNetwork.vue 优化 - -### 原始代码 (需要替换的部分) -```typescript -let refreshTimer: NodeJS.Timeout | null = null - -onMounted(() => { - loadNetworkData() - refreshTimer = setInterval(() => { - loadNetworkData() - }, 3000) -}) - -onUnmounted(() => { - if (refreshTimer) { - clearInterval(refreshTimer) - refreshTimer = null - } -}) -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useDataRefresh } = useBackgroundOptimization() - -// 使用优化的数据刷新定时器 -const { loading } = useDataRefresh( - 'analytics-network', - loadNetworkData, - 3000, // 3秒间隔 - true // 立即执行 -) -``` - -## 6. AnalyticsProcesses.vue 优化 - -### 原始代码 (需要替换的部分) -```typescript -let refreshTimer: NodeJS.Timeout | null = null - -onMounted(() => { - loadProcessesData() - refreshTimer = setInterval(() => { - loadProcessesData() - }, 3000) -}) - -onUnmounted(() => { - if (refreshTimer) { - clearInterval(refreshTimer) - refreshTimer = null - } -}) -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useDataRefresh } = useBackgroundOptimization() - -// 使用优化的数据刷新定时器 -const { loading } = useDataRefresh( - 'analytics-processes', - loadProcessesData, - 3000, // 3秒间隔 - true // 立即执行 -) -``` - -## 7. FileList.vue 优化 (批量重命名进度) - -### 原始代码 (需要替换的部分) -```typescript -// 加载进度SSE -const progressEventSource = ref() - -// 使用SSE监听加载进度 -function startProgress() { - progressEventSource.value = new EventSource(`${import.meta.env.VITE_API_BASE_URL}system/progress/batchrename`) - progressEventSource.value.onmessage = event => { - const progress = JSON.parse(event.data) - if (progress) { - progressText.value = progress.text - progressValue.value = progress.value - progressEnabled.value = progress.enable - } - } -} - -function stopProgress() { - progressEventSource.value?.close() -} -``` - -### 优化后的代码 -```typescript -import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' - -const { useProgressSSE } = useBackgroundOptimization() - -// 进度是否激活 -const progressActive = ref(false) - -// 进度SSE消息处理函数 -function handleProgressMessage(event: MessageEvent) { - const progress = JSON.parse(event.data) - if (progress) { - progressText.value = progress.text - progressValue.value = progress.value - progressEnabled.value = progress.enable - } -} - -// 使用优化的进度SSE连接 -const progressSSE = useProgressSSE( - `${import.meta.env.VITE_API_BASE_URL}system/progress/batchrename`, - handleProgressMessage, - 'file-batch-rename-progress', - progressActive -) - -function startProgress() { - progressActive.value = true - progressSSE.start() -} - -function stopProgress() { - progressActive.value = false - progressSSE.stop() -} -``` - -## 批量应用优化的步骤 - -### 1. 准备工作 -确保已经创建了所有必要的优化工具文件: -- `src/utils/sseManager.ts` -- `src/utils/backgroundManager.ts` -- `src/composables/useBackgroundOptimization.ts` - -### 2. 应用补丁 -逐个文件应用上述优化补丁: - -```bash -# 示例:优化TransferQueueDialog.vue -# 1. 添加import语句 -# 2. 替换SSE相关代码 -# 3. 测试功能是否正常 -``` - -### 3. 验证步骤 -每个组件优化后都需要验证: - -1. **功能验证**:确保原有功能正常工作 -2. **后台测试**:切换到后台再回来,验证恢复正常 -3. **控制台检查**:无错误信息 -4. **性能监控**:使用`debugBackground()`查看状态 - -### 4. 批量验证脚本 -```javascript -// 在浏览器控制台运行,检查所有优化是否生效 -function verifyOptimizations() { - const timers = window.backgroundManager.getTimersInfo() - const status = window.backgroundManager.getStatus() - - console.log('=== 优化验证报告 ===') - console.log(`当前状态: ${status.isBackground ? '后台' : '前台'}`) - console.log(`定时器总数: ${status.timerCount}`) - console.log(`用户活跃: ${status.isUserActive}`) - - console.table(timers) - - if (timers.length === 0) { - console.warn('⚠️ 没有发现任何托管定时器,可能优化未完全应用') - } else { - console.log('✅ 发现托管定时器,优化正在生效') - } -} - -// 运行验证 -verifyOptimizations() -``` - -## 预期完整优化效果 - -应用所有补丁后的最终效果: - -- **SSE连接**: 8个组件的SSE连接全部优化 -- **定时器**: 10+个定时器全部托管到后台管理器 -- **后台资源消耗**: 接近零(除了必要的系统监听器) -- **iOS后台存活时间**: 预计提升3-5倍 - -这些补丁可以在有时间时逐步应用,每个都是独立的优化,不会相互影响。 \ No newline at end of file diff --git a/部署检查清单.md b/部署检查清单.md deleted file mode 100644 index 9bc4abc5..00000000 --- a/部署检查清单.md +++ /dev/null @@ -1,220 +0,0 @@ -# PWA 后台优化部署检查清单 - -## 🚀 部署前检查 - -### ✅ 文件确认 -确保以下文件已正确创建: - -- [ ] `src/utils/sseManager.ts` - SSE管理器 -- [ ] `src/utils/backgroundManager.ts` - 后台管理器 -- [ ] `src/composables/useBackgroundOptimization.ts` - 组合函数 -- [ ] `src/main.ts` - 已添加初始化代码 - -### ✅ 核心组件优化确认 -以下组件已使用优化的实现: - -- [ ] `src/layouts/components/UserNotification.vue` - 用户通知SSE -- [ ] `src/views/system/MessageView.vue` - 消息视图SSE -- [ ] `src/views/system/LoggingView.vue` - 日志视图SSE -- [ ] `src/pages/resource.vue` - 搜索进度SSE -- [ ] `src/App.vue` - 背景图片轮换定时器 -- [ ] `src/utils/pwaStateManager.ts` - PWA状态保存定时器 -- [ ] `src/views/dashboard/AnalyticsMemory.vue` - 内存监控定时器 -- [ ] `src/views/dashboard/AnalyticsCpu.vue` - CPU监控定时器 -- [ ] `src/views/dashboard/AnalyticsSpeed.vue` - 速度监控定时器 - -## 🔍 功能验证测试 - -### 1. 基础功能测试 -在开发环境中: - -```bash -# 启动开发服务器 -npm run dev -# 或 -yarn dev -``` - -#### ✅ 初始化验证 -1. 打开浏览器控制台 -2. 查看是否有 "初始化后台优化工具..." 日志 -3. 运行 `window.debugBackground` 应该存在 -4. 运行 `debugBackground()` 查看定时器状态 - -#### ✅ SSE连接验证 -1. 打开用户通知 - 查看控制台SSE连接日志 -2. 打开系统消息页面 - 验证消息实时接收 -3. 打开日志页面 - 验证日志实时显示 -4. 进行搜索 - 验证进度条正常显示 - -#### ✅ 定时器验证 -1. 进入仪表盘页面 -2. 观察CPU、内存等数据是否正常刷新 -3. 运行 `debugBackground()` 查看定时器列表 - -### 2. 后台优化验证 - -#### ✅ 后台切换测试 -1. **准备工作** - ```javascript - // 在控制台运行,开启详细日志 - localStorage.setItem('debug', 'true') - ``` - -2. **执行测试** - - 确保应用在前台正常运行 - - 切换到其他应用(保持5-10秒) - - 切换回PWA应用 - - 观察控制台日志 - -3. **预期结果** - - 看到 "Background: 进入后台,暂停定时器" 日志 - - 看到 "SSE: 后台关闭连接" 日志 - - 回到前台时看到 "Background: 回到前台,恢复定时器" - - 看到 "SSE: 前台恢复连接" 日志 - -#### ✅ 定时器暂停验证 -```javascript -// 测试脚本:验证定时器在后台暂停 -function testBackgroundPause() { - console.log('=== 前台状态 ===') - const frontStatus = window.backgroundManager.getStatus() - const frontTimers = window.backgroundManager.getTimersInfo() - console.log('后台状态:', frontStatus.isBackground) - console.log('运行中定时器:', frontTimers.filter(t => t.status === 'running').length) - - // 模拟切换到后台(需要实际切换应用) - console.log('请切换到其他应用,然后切换回来再运行 checkBackgroundStatus()') -} - -function checkBackgroundStatus() { - console.log('=== 当前状态 ===') - const status = window.backgroundManager.getStatus() - const timers = window.backgroundManager.getTimersInfo() - console.log('后台状态:', status.isBackground) - console.log('暂停定时器:', timers.filter(t => t.status === 'paused').length) - console.log('运行定时器:', timers.filter(t => t.status === 'running').length) - console.table(timers) -} - -// 开始测试 -testBackgroundPause() -``` - -### 3. 性能验证 - -#### ✅ 内存使用测试 -1. 打开Chrome DevTools -> Performance -2. 开始录制性能 -3. 正常使用应用2-3分钟 -4. 切换到后台30秒 -5. 切换回前台继续使用1分钟 -6. 停止录制,查看内存使用图表 - -**预期结果**: 后台期间内存使用趋于平稳,无明显增长 - -#### ✅ 网络活动测试 -1. 打开Chrome DevTools -> Network -2. 清空网络日志 -3. 切换到后台30秒 -4. 观察网络请求 - -**预期结果**: 后台期间无SSE连接,无定时API请求 - -## 🐛 故障排除 - -### 常见问题 - -#### 问题1: 控制台出现导入错误 -``` -Cannot resolve '@/composables/useBackgroundOptimization' -``` -**解决方案**: 确保文件路径正确,检查组合函数文件是否存在 - -#### 问题2: 定时器没有被管理 -```javascript -// 检查是否正确使用了优化的定时器 -debugBackground() -// 如果看不到定时器,检查是否正确调用了 useDataRefresh -``` - -#### 问题3: SSE连接无法重连 -```javascript -// 检查SSE管理器状态 -window.sseManagerSingleton -// 手动测试重连 -const manager = window.sseManagerSingleton.getManager('test-url') -``` - -#### 问题4: 后台状态检测不准确 -```javascript -// 检查页面可见性API -console.log('document.hidden:', document.hidden) -console.log('visibilityState:', document.visibilityState) -``` - -### 调试命令速查 - -```javascript -// 查看所有定时器状态 -debugBackground() - -// 查看后台管理器状态 -window.backgroundManager.getStatus() - -// 查看SSE管理器 -window.sseManagerSingleton - -// 手动暂停所有定时器(测试用) -window.backgroundManager.pauseAllTimers() - -// 手动恢复所有定时器(测试用) -window.backgroundManager.resumeAllTimers() - -// 清理所有资源(测试用) -window.backgroundManager.destroy() -window.sseManagerSingleton.closeAllManagers() -``` - -## 📊 性能基准 - -### 优化前 vs 优化后 - -| 指标 | 优化前 | 优化后 | 改善 | -|------|--------|--------|------| -| 后台SSE连接 | 5个常驻 | 0个 | 100% ↓ | -| 后台定时器 | 8个运行 | 0个运行 | 100% ↓ | -| 后台API请求/分钟 | 20+ | 0 | 100% ↓ | -| 状态保存频率 | 30秒 | 60秒 | 50% ↓ | -| 平均CPU使用(后台) | 中等 | 极低 | 80% ↓ | - -## ✅ 最终验收标准 - -### 必须通过的测试 -1. **功能完整性**: 所有原有功能正常工作 -2. **后台优化**: 切换后台后资源消耗显著降低 -3. **恢复能力**: 回到前台后所有功能快速恢复 -4. **稳定性**: 长时间使用无内存泄漏 -5. **用户体验**: 切换过程无明显延迟或卡顿 - -### iOS设备测试 -1. 在iPhone/iPad上安装PWA -2. 正常使用后切换到其他应用 -3. 等待10-30分钟后回到PWA -4. 验证应用仍在运行且功能正常 - -**成功标准**: PWA应用后台存活时间比优化前延长3-5倍 - -## 🎯 部署建议 - -### 渐进式部署 -1. **第一阶段**: 部署核心优化工具和主要组件 -2. **第二阶段**: 应用剩余组件优化补丁 -3. **第三阶段**: 根据使用情况进行细节调优 - -### 监控建议 -- 部署后密切关注用户反馈 -- 监控应用崩溃率和性能指标 -- 定期检查优化效果是否持续 - -优化实施完成后,您的PWA应用在iOS设备上的后台生存能力将得到显著提升! \ No newline at end of file