v0.3.0 - RSS 文章持久化架构重构
Silent Feed v0.3.0 发布总结
发布日期: 2024-12-05
版本类型: Minor Release
主题: 架构重构 & 性能优化 & 可视化增强
🎯 核心亮点
1. RSS 文章持久化架构重构 (Phase 10) ⭐ 重大架构升级
PR: #58
问题: RSS 更新时删除旧文章,导致推荐池中的文章消失,统计数据错误
解决方案: 重构数据架构,实现文章状态追踪而非物理删除
Sprint 1: 数据库 Schema 升级 (v15 → v16)
新增 13 个字段:
- 推荐池管理:
inPool,poolAddedAt,poolRemovedAt,poolRemovedReason - RSS 状态追踪:
inFeed,lastSeenInFeed - 软删除支持:
deleted,deletedAt,deleteReason - 元数据追踪:
metadataUpdatedAt,updateCount - 重要性评分:
importance(0-100)
新增索引: [inPool+poolAddedAt], [inFeed+published], [deleted+deletedAt]
自动迁移系统:
- 检测是否需要迁移(检查新字段是否存在)
- 同步推荐状态到文章表
- 计算文章重要性评分
- 初始化默认值
Sprint 2: RSS 增量追加策略
核心改进:
- ❌ 删除物理删除逻辑 - 不再
bulkDelete旧文章 - ✅ 增量追加 - 新文章标记
inFeed=true,旧文章标记inFeed=false - ✅ 保护推荐池 -
inPool=true的文章不会被标记为过期
效果:
- 推荐池文章永久保留,统计数据准确
- 历史文章可追溯,用户行为完整记录
- RSS 更新不再影响已推荐内容
Sprint 3: 推荐池状态同步
实现:
- 推荐生成时: 新增推荐
inPool=true,被替换推荐inPool=false - 阅读操作时: 同步更新
read=true, inPool=false - 不想读操作时: 同步更新
dismissed=true, inPool=false
2. AI 摘要集成 (MVP)
PR: #54
功能: 使用 AI 生成的摘要替换 RSS 原始摘要
实现:
- 推荐生成时自动调用 AI 分析接口
- 提取 AI 返回的摘要字段
- 优先显示 AI 摘要,降级到 RSS 摘要
用户价值:
- 更准确的文章概述
- 统一的摘要格式
- 更好的推荐决策依据
3. 订阅源蛛网图可视化 (Phase 11)
PR: #59
实际功能: 以订阅源为轴的雷达图,直观展示每个订阅源的文章分布和用户行为
蛛网图结构:
- 轴线: 每个已订阅的 RSS 源对应一条轴(从中心向外辐射)
- 数据层: 每条轴上展示 4 个数据点(从外到内叠加):
- 文章总数 (黄色,透明度 0.2) - 包括历史文章
- 推荐总数 (绿色,透明度 0.3) - 已推荐 + 推荐池中的文章
- 不想读总数 (红色,透明度 0.4) - 用户标记为不感兴趣
- 阅读总数 (蓝色,透明度 0.5) - 用户已阅读的文章
技术实现:
- 对数归一化: 使用
log(value + 1)避免大数值遮挡小数值 - 对称排列算法: 优化订阅源在圆周上的分布,提升视觉平衡
- 二阶贝塞尔曲线: 平滑连接数据点,避免尖锐折角
- 最差订阅源标记: 自动标记推荐数最低的 3 个源(红色警告 + 脉冲动画)
- 响应式设计: 800x500 宽屏比例,适配标签展开布局
用户价值:
- ✅ 快速识别高质量订阅源(推荐数多、阅读率高)
- ✅ 发现低价值订阅源(推荐数少、不想读多)
- ✅ 数据驱动的订阅管理决策
4. 推荐系统性能优化
分支: fix/recommendation-optimization
4.1 画像重建防抖机制
问题: 快速连续标记"不想读"触发多次 AI 请求,浪费 API 配额
解决方案: 5 秒防抖,批量处理拒绝记录
效果:
- 节省 80% API 请求: 5 次快速操作 → 1 次 AI 调用
- 用户体验无影响:拒绝行为立即记录
- 画像更新延迟 5 秒,用户无感知
4.2 推荐池容量优化
问题: 推荐池容量 = 窗口大小(3 条),预备队列不足
解决方案: 推荐池容量扩大至 2 倍窗口大小(3 → 6 条)
效果:
- 预备队列增加 100%
- 提升推荐多样性
- 更快的推荐补充
🐛 Bug 修复
1. 翻译逻辑优化
问题: 推荐翻译使用 navigator.language 而非用户设置的 i18n.language
修复: 使用 i18n.language 作为目标语言判断依据
影响: 修正了英文界面下推荐条目的语言标签显示错误
2. RSS 更新覆盖用户操作状态 (Phase 10)
问题: RSS 重新抓取时覆盖用户的阅读/不想读状态
修复: 增量更新策略,保护已有用户操作数据
3. 语言标签点击无法移除推荐
问题: 点击推荐条目的语言标签后无法正确移除条目
修复: 修正事件冒泡和状态同步逻辑
4. Favicon 错误处理优化
问题: Favicon 加载失败导致控制台错误
修复: 静默失败,自动降级到扩展图标
5. 推荐统计数据不一致 (Phase 10)
问题: 推荐数统计与实际推荐池不同步
修复: 同步推荐状态到文章表,统一数据源
6. 数据迁移重复运行 (Phase 10)
问题: 重启后重复执行数据迁移
修复: 添加迁移检测逻辑,仅首次运行
🎨 UI 改进
1. 系统数据页卡片优化
- 数值右对齐,提升可读性
- 适用范围:学习页面数、存储占用、AI 成本统计
- 保持多行数据的视觉一致性
2. RSS 设置优化
- 渲染层移除标题中的历史域名后缀(不改数据库)
- 订阅来源标签颜色区分(发现/手动/导入)
- 已分析方块进一步变浅提升可读性
3. 推荐池进度条优化 (Phase 10)
- 修复进度条累积问题
- 显示推荐池管理状态
📊 版本数据对比
| 指标 | v0.2.0 | v0.3.0 | 变化 |
|---|---|---|---|
| 核心功能 | 7 个 | 11 个 | +57% |
| 架构重构 | - | Phase 10 | 新增 |
| 数据库版本 | v15 | v16 | +13 字段 |
| 可视化组件 | 3 个 | 4 个 | +1 (蛛网图) |
| 测试用例 | 1,401 | 1,464 | +63 |
| 代码覆盖率 | 71% | 72.7% | +1.7% |
| 性能优化 | - | 80% API 节省 | 新增 |
| Bug 修复 | - | 6 个 | 新增 |
🔧 技术改进
1. 数据库架构升级 (v15 → v16)
- 新增字段: 13 个(推荐池管理、RSS 状态追踪、软删除)
- 新增索引: 3 个复合索引提升查询性能
- 自动迁移: 智能检测和数据迁移系统
- 向后兼容: 自动初始化默认值
2. 测试覆盖率提升
- 行覆盖率: 71% → 72.7% (+1.7%)
- 函数覆盖率: 71% → 73.06% (+2.06%)
- 分支覆盖率: 60% → 62.39% (+2.39%)
- 新增测试: 63 个(防抖机制、蛛网图、Phase 10 迁移逻辑)
3. 代码质量
- 所有新功能都有对应的单元测试
- 测试套件:1464/1465 通过 (99.9%)
- 防抖逻辑使用真实定时器测试
- Phase 10 迁移逻辑完整测试覆盖
4. 文档完善
- 新增
PHASE_10_COMPLETION.md: Phase 10 完成总结(400+ 行) - 新增
PHASE_10_DEBUGGING_GUIDE.md: 调试和验证指南 - 新增
RECOMMENDATION_OPTIMIZATION.md: 性能优化方案文档 - 更新 CHANGELOG.md: 详细的版本更新记录
- 国际化文档更新:蛛网图相关翻译
5. 性能优化
- API 成本降低 80%: 防抖机制批量处理用户操作
- 推荐多样性提升 100%: 推荐池容量翻倍
- 查询性能提升: 新增复合索引优化数据库查询
📝 已知问题修复
参考 docs/bugs 文件,以下问题已在 v0.3.0 修复:
- ✅ 翻译逻辑 bug: 语言检测错误,使用浏览器语言而非用户设置
- ✅ 快速连续操作导致 API 浪费: 防抖机制解决
- ✅ 推荐池容量不足: 扩容至 2 倍解决
- ✅ RSS 更新覆盖用户状态: Phase 10 架构重构解决
- ✅ 推荐统计数据不一致: 状态同步机制解决
- ✅ 数据迁移重复运行: 检测逻辑解决
🚀 下一步计划 (v0.4.0)
计划功能
- Chrome AI 集成: 免费的浏览器内置 AI 支持(Chrome 内置 Gemini Nano)
- 预算提醒: AI 用量预算设置和超额提醒
- 推荐算法优化: 基于用户反馈的机器学习改进
- 数据库性能优化: 进一步的查询优化和缓存策略
待处理 Bugs
参考 docs/bugs 文件中未完成的 [ ] 项目
🙏 致谢
感谢所有用户的反馈和建议!
本次发布包含:
- 4 个主要功能: Phase 10 架构重构、AI 摘要、蛛网图、性能优化
- 6 个 Bug 修复: 涵盖翻译、RSS、推荐系统等
- 3 个 UI 改进: 提升用户体验和视觉效果
文档版本: 2.0
最后更新: 2024-12-05
维护者: Silent Feed Team