我刚刚完成了 ModStream — 一款 Devvit 网页应用,它为 Reddit 的子版块管理员提供了一个实时仪表板,内置了垃圾邮件集群检测、重复违规者展示和一键操作(批准/删除/封禁/静音)。
开发它揭示了三个值得分享的事情,适用于任何 Devvit Web 工作:
1. Redis 缓存是必不可少的,不是可选的
我天真地认为,普通的子版块会有低报告量。错误。测试期间,getReports({ type: 'post' }) 和 getReports({ type: 'comment' }) 的并行调用迅速耗尽了限速头程。添加每个子版块的 60 秒 Redis 缓存解决了问题——但我希望我从一开始就把它建入,而不是在遇到 429 错误后才添加。
我采用的模式是:
const cacheKey = `dashboard:${subredditName}`;
const cached = await redis.get(cacheKey);
if (cached) return JSON.parse(cached);
// ... fetch fresh data ...
await redis.set(cacheKey, JSON.stringify(data), { expiration: 60 });
2. Demo 模式是首等功能,不是hack
当队列为空(大多数测试子版块都是这样),应用显示 nothing — 这意味着评判者看到一个空白屏幕。 我添加了一个 buildDemoData() 路径,当 items.length === 0 时触发,并注入三个名为 cluster 和 flag 的真实 demo 项。
重要的是:demo 项使用合成 ID,因此动作按钮调用真实的 Reddit API 并在失败时优雅地失败。 不会意外地封禁用户。但是,显示 路径被完全执行。
我会把这个作为任何mod工具的标准实践。
3. iFrame限制比文档中描述的要更为严格
window.open — 被阻止。 window.alert — 被阻止。 如果您正在将外部链接导航的东西移植到这里,请在任何其他事情之前替换每个 window.open 为 navigateTo 从 @devvit/web/client。 失败模式是静默的无效操作,而不是错误,这花费了我debugging时间。
这个项目已进入mod工具hackathon(截止日期:5月27日)。 证明页面:https://voiddo.com/reddit/mod-tools/
我很好奇是否还有其他人在大型子版块上遇到限速问题,或者找到了demo模式问题的更好的模式。
评论 (0)