惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
美团技术团队
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
A
About on SuperTechFans
Recent Announcements
Recent Announcements
D
Docker
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
腾讯CDC
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志

积薪 - 文章

我可能破解了日式拉面的密码 关于本站最近的更新 谣言盛行的时代,你该如何进行信息核查? 近一年来社交网络使用习惯和信息获取方式的一些改变 终于有日本驾照了 台湾观察 我目前使用的AI服务 给博客加了一个搜索功能 你爱的是哪个国? 土地财政的深远影响 我们正在目睹中国文明的孤岛化 原积薪项目将于近日下线 记一次微信群吵架 终于生活在一个气候舒适的地方了 本站已进化到第三代 压垮我的最后一根稻草 不要指望银发经济 为什么是日本 日本首月记录 30岁,我做了个重大决定 什么才是规矩的博客 积薪24年1月更新 尝试留住时间的中年人 ADV换踏板,我不想要远方了 现在房价进行到哪一步了? 回老家远程一周,阳了 连肝两周,积薪8月大更新 一本典型的中式社科书 不太浪漫的田园生活
用Cloudflare Durable Objects实现延迟部署
李大毛 · 2025-11-14 · via 积薪 - 文章

之前做过一个项目,由于是个人网站类型的内容站,就选择了纯静态网站方案,框架是Astro,CMS则采用Sanity,项目部署在Cloudflare Pages。在Sanity进行设置,在有内容变动的时候,触发重新build的webhook。

但是随着内容的增加(某个类型的内容有600多条),build时间也随之增加,每次构建时间甚至有7分钟。而Sanity不支持手动触发webhook,意味着假如你保存了几次文章,就会触发同样多次的build任务。不仅产生大量无用的部署,还极其耗时。如果改了十几篇文章,要看到最新内容就得等1个小时了。

所以今年在做该项目的新功能时,我把延迟构建也考虑了进去。

这个功能很简单:作为webhook中转,收到构建请求后,延迟一段时间再发出,如果一定时间内有新的请求,就重新计时。如果延迟时间是20分钟,无论你改了多少次,只要间隔时间不超过20分钟,实际的构建就只有一次。

由于我的原则是能不跟服务器打交道就不打交道,我想尽量用Cloudflare来实现这一需求。

仅仅用workers是不行的。因为workers无状态的,不能简单的setInterval。经过一番搜索发现Durable Objects可以实现这个需求。

这篇文档中Cloudflare介绍了如何设置Durable Objects在未来某个时间唤醒。

并且还可以通getByName(“scheduler”)使这些触发事件获取到的是同一个实例,新请求会覆盖之前的请求,所以不会产生重复构建。

为了让其更通用,我没有将目标webhook链接写死,而是要求以http头的方式传入,同时也接受延迟时间、验证token。这样就变成了一个多项目共用的通用webhook延迟触发器。

详细代码和使用方法见GitHub