Skip to content

Conversation

@smallnest
Copy link
Owner

  • 每次都加载所有的笔记本以及每个笔记本的日记性能很低.要实现按需加载
  • 实现本地缓存

## 性能优化总结

### 1. 后端缓存层 (`backend/cache.go`)
- 创建了通用的内存缓存 `Cache`,支持 TTL 和自动清理过期条目
- 创建了 `CachedStore` 包装器,为 `Store` 的所有数据操作添加缓存支持
- 缓存键生成器用于不同数据类型(笔记本、笔记、来源、聊天会话)
- 写操作自动使相关缓存失效

### 2. 后端按需加载 (`backend/server.go`)
- 移除了启动时加载所有笔记本向量索引的逻辑
- 添加了 `loadNotebookVectorIndex()` 方法实现按需加载
- 使用 `loadedNotebooks` map 和 `vectorMutex` 跟踪已加载的笔记本
- 在 `handleTransform`、`handleChat` 和 `handleSendMessage` 中触发按需加载

### 3. 前端本地缓存 (`backend/frontend/static/app.js`)
- 添加了 `LocalCache` 类,基于 localStorage 实现前端缓存
- 支持自定义 TTL、按前缀删除、清理过期缓存
- 集成到 `loadNotebooks()`、`loadSources()`、`loadNotes()` 方法
- 写操作后使相关缓存失效

### 性能提升效果
- **启动速度**: 不再在启动时加载所有向量索引,大幅缩短启动时间
- **响应速度**: 后端缓存(5分钟TTL)和前端缓存减少重复数据库查询
- **内存使用**: 向量索引按需加载,只加载活跃使用的笔记本
- **并发安全**: 使用读写锁保护共享状态
@smallnest smallnest merged commit f6adeb6 into master Jan 6, 2026
1 check passed
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.

2 participants