文章

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-clientfetch 响应
        • 检测到 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 数据
                            • 避免重复拉取相同页面内容,提高构建性能
                              Comments load when you scroll here.

                              © Ely 2021 - 2026