文章
Notion博客优化记录
Loading collection...
Notion API 适配与性能优化总结
1. 解决 recordMap 结构变化导致的 database 识别问题
问题根源
Notion API 返回的
recordMap 包装结构发生变化,导致 notion-client 无法正确识别 database。- 旧版结构:直接读取
entry.value.type
- 新版结构:实际路径变为
entry.value.value.type(仅当recordMap.version === 3时)
解决方案
在
lib/server/notion-api.js(第 1 行附近)添加了一个轻量级兼容层:- 拦截
notion-client的fetch响应
- 检测到
recordMap.version === 3时,将entry.value.value解包回旧的entry.value结构
效果
原有的
getPage → queryCollection → react-notion-x 渲染链路继续正常工作。经验证,旧的 queryCollection 接口仍能正常返回文章的 blockIds。2. 请求限流、重试与构建缓存优化
2.1 请求串行化与退避重试(lib/server/notion-api.js 第 16 行附近)
- 所有 Notion API 请求改为串行执行,避免并发触发限流
- 对以下 HTTP 状态码进行指数退避重试:
429(Too Many Requests)500(Internal Server Error)503(Service Unavailable)
- 默认请求间隔:250 ms
- 最大重试次数:6 次
2.2 构建时缓存文章列表(lib/notion/getAllPosts.js 第 15 行附近)
- 在
npm run build期间,对文章列表进行缓存
- 避免为每个
slug重复请求根database,显著减少 API 调用次数
2.3 构建时缓存单篇文章的 Block 数据(lib/notion/getPostBlocks.js 第 5 行附近)
- 在
npm run build期间,缓存每篇页面的block数据
- 避免重复拉取相同页面内容,提高构建性能