更新了一下自己的 njump 实例, 发现有一个三周前的更改把获取公钥作者最新笔记的动作变得更加迟缓了, 总是异步从外部中继获取变成了优先从本地缓存数据库中获取, 现在如果本地缓存数据库中的笔记条数少于 5 条才会从外部中继获取(默认情况下获取并缓存的作者笔记条数是 100 条), 而这些缓存的刷新时间是 24 小时.

> https://github.com/fiatjaf/njump/commit/89daf32a5f412e15186e850cd1413cc24ca561a0

这个改动也同时影响到 RSS/Atom 路由, 在这个改动前路由里的笔记刷新是定期从外部中继异步获取后就会刷新, 现在也只会跟着缓存刷新一起刷新, 也就是 24 小时才会更新一次.

Reply to this note

Please Login to reply.

Discussion

但是只要事件在 24 小时刷新间隔内被提前缓存进了本地数据库, 这个 RSS/Atom 路由生成输出的时候就会立马读取, 比如有人主动用 njump 预览了一个还没有进入缓存的作者的事件, 那这个 RSS/Atom Feed 排序就直接乱掉了, 而没有被主动用 njump 预览过的事件就不会进入 Feed.

现在魔改了一下, 把 RSS/Atom 路由单独进行单独的判断, 不缓存也不从本地数据库读缓存事件, 每次有请求才立马从预设的外部中继里请求并生成 Feed, 请求数量也从默认的 100 条调到了一般 RSS Feed 常用的 20 条. :eveonecat_coffeebath: (实际生成 Feed 的的 entry 数量可能会多于这个数)

虽然 njump 给 Feed 的 .xml 设置了缓存控制标头, 但是基本上绝大多数的 RSS 阅读器都不会遵守, 于是还得用 CDN 强行给 .xml 缓存一遍(虽然缓存标头还是遵守源服务器).

PS: 总感觉还会有什么奇怪bug.

发现问题了, 预设中继里面可能有些笔记根本没有广播到, 于是可能会出现每次生成的 Feed 都可能不一样的问题... 感觉比排序出问题还严重了.

给获取作者最新笔记加了一个新条件, 每次获取的时候都会从外部服务器请求最新笔记然后存储到本地数据库. 单独生成 RSS Feed 的也会重复一次, 但是会从本地数据库查询生成 RSS Feed, 这下不仅及时性提升了, 不一致的问题解决了, 还把 entry 数量真正限制在了 20 条, 满意. :eveonecat_congrats:

PS: 希望没有bug了.