Skip to content

Conversation

@Rygtx
Copy link

@Rygtx Rygtx commented Dec 12, 2025

功能描述

解决批量下载大量歌曲(1000+)时出现的内存泄漏问题。实现了一个轻量级的 LRU(最近最少使用)缓存清理系统,防止长时间下载导致的内存无限增长。

问题背景

  • 批量下载大量歌曲时,内存占用不断增加,最终导致浏览器卡顿或崩溃
  • 下载完成后缓存得不到及时释放,占用过多内存
  • 需要找到清理时机与稳定性的平衡点

解决方案

1. 新增内存管理模块

  • 文件: src/utils/downloadCleanupManager.js
  • 功能: LRU 缓存管理,自动清理超出限制的最旧项
  • 限额: 保留最近 16 项已完成的下载

2. 集成到批量下载流程

  • 文件: src/components/batchDownloadSongs.js
  • 改动: 每次下载完成时调用 addPendingCleanup()
  • 效果: 下载过程中自动维护内存占用

3. 修复导入路径

  • 文件: src/playlist/playlistDetail.js
  • 修复: SongsDownUpLoadsongsDownUpLoad(Linux 大小写敏感)

清理策略详解

下载过程中 (1-16 项) 下载过程中 (>16 项) 下载完成
保留全部缓存 → LRU 自动清理 → 保留缓存

用户刷新页面后清除

场景 行为 原因
单首下载 立即保存,无延迟 直接触发 LRU
批量下载 保留 16 项,超出自动清理 防止内存溢出
下载完成 不主动清理 避免清理过快导致写入失败
页面刷新 自动清除所有缓存 利用页面生命周期

测试结果

✅ 支持一次性下载 1000+ 首歌曲
✅ 内存占用保持在可控水平(最多 16 个文件的缓存)
✅ 下载稳定性不受影响
✅ 用户无需手动清理,刷新后自动清除

新增功能:
- 实现 LRU 缓存清理管理器(downloadCleanupManager)
- 防止批量下载大量歌曲时内存溢出
- 保留最近 16 项下载,超过自动清理最旧的

改动列表:
- ncmExtend/src/utils/downloadCleanupManager.js (新建)
- ncmExtend/src/components/batchDownloadSongs.js (集成清理回调)
- ncmExtend/src/playlist/playlistDetail.js (修复导入路径)
- ncmExtend/publish/ncmExtend.user.js (编译输出)

清理策略:
✓ 下载过程中:超过 16 项时清理最旧的(防止内存无限增长)
✓ 下载完成时:保留缓存(避免写入失败)
✓ 页面刷新后:自动清除(随页面生命周期)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant