兰 亭 墨 苑
期货 · 量化 · AI · 终身学习
首页
归档
编辑文章
标题 *
URL 别名 *
内容 *
(支持 Markdown 格式)
# 从全量扫描到增量缓存:一次重构让标签与历史页性能翻倍 > 通过引入标签缓存与增量更新机制、基于时间游标的无限滚动分页,以及归档接口并行化整合请求,显著减少 I/O 与接口调用次数,全面提升页面加载性能与系统可维护性。 --- --- sync_time: 2026-04-24 23:01:07 source: clipboard content_hash: 6339815886917a79749d59ece84aea55 tags: [性能优化, 后端开发, 前端优化, 接口设计] summary: "完成标签缓存、无限滚动与归档接口优化" score: 8 --- # 核心摘要 # 优化改动总结 ## 一、标签缓存优化(`internal/history/store.go`) ### ✅ 新增字段 - `tagCache map[string]int` - `tagCacheBuilt bool` ### ✅ 优化内容 - `AllTags()`: - 首次调用时构建缓存 - 后续直接读取缓存,避免全量扫描 JSONL 文件 - `Append()`: - 增量更新标签缓存 - `UpdateTags()`: - 增量更新新增标签计数 - `compact()`: - 执行后重建缓存,确保数据一致性 --- ## 二、历史页无限滚动(`store.go` + `handlers.go` + `index.html`) ### ✅ 后端改动 - 新增方法:`RecentAfter(before time.Time, n int)` - 返回指定时间之前的历史条目 - `/api/history`: - 新增 `after` 参数(时间戳游标支持) ### ✅ 前端改动 - 初始加载 30 条数据 - 滚动到底部自动加载下一批 - 实现基于时间游标的分页机制 --- ## 三、归档页请求优化(`handlers.go` + `server.go` + `index.html`) ### ✅ 新增接口 - `/api/archive/today` - 并行发起 4 个 SSH 请求 - 一次性返回: - 年列表 - 月列表 - 日列表 - 当日文件列表 ### ✅ 性能优化 - 首次进入归档页仅需 **1 次请求** - 替代原先的 **4 次串行请求** ### ✅ 代码优化 - 抽取公共函数:`renderFileList()` - 提高复用性 - 减少重复代码 --- # 总体优化效果 - 减少重复 I/O 扫描 - 降低接口调用次数 - 提升页面加载性能 - 改善用户滚动体验 - 优化代码结构与可维护性 ### 原始内容 所有优化完成。以下是改动总结: 1. 标签缓存 (internal/history/store.go) - Store 新增 tagCache map[string]int 和 tagCacheBuilt bool - AllTags() 首次调用时构建缓存,后续直接读缓存,不再全量扫描 JSONL 文件 - Append() 增量更新标签缓存 - UpdateTags() 增量更新新增标签的计数 - compact() 后重建缓存 2. 历史页无限滚动 (store.go + handlers.go + index.html) - 后端新增 RecentAfter(before time.Time, n int) 方法,返回指定时间之前的条目 - /api/history 支持 after 参数(时间戳游标) - 前端初始加载 30 条,滚动到底部自动加载下一批 3. 归档页合并请求 (handlers.go + server.go + index.html) - 新增 /api/archive/today 接口,并行发起 4 个 SSH 请求,一次返回年/月/日列表 + 当日文件 - 前端首次打开归档页只需 1 次请求,替代原来的 4 次串行请求 - 提取 renderFileList() 公共函数复用
配图 (可多选)
选择新图片文件或拖拽到此处
标签
更新文章
删除文章