开始

为了博客的速度优化,我将我博客全部的内容使用Cache Everything“存”在了cloudflare中。这样使得每次获取我博文是不需要再进行【图一】的操作,而只需进行【图二】的操作。

那么问题来了,我将HTML文章也进行了缓存。那我每次写完文章后,每次都要到Cloudflare网站上去清理缓存,有时候甚至还会忘记清理,这多麻烦啊。

如何设置全部缓存

Cloudflare默认不支持缓存全部内容,但是你可以通过设置Page Rules(页面规则)的方式让其强制缓存所有内容。

比如我就是这么设置的:

问题解决方法

既然是我提交一个博文后需要清理缓存,那么只要实现出执行一次commit后就自动执行就行了。

实现这个问题有两种解决方式,一种是使用travis-ci,一种是使用GitHub自带的GitHub Actions。因为前面某个项目我正巧用到了GitHub Actions,所以这次我也使用了它。

那么需要的代码就是发送post到Cloudflare,代码并不复杂。经过搜索,我挑选了一个放入到模板当中。

然而,实现并未如此简单,我们还需要通过sleep来实现3分钟后再清除缓存。否则可能netlify还没有搭建完,再有人进行访问。那就白清除了。你在想桃子,你博客本来就没人看,还会产生这破问题?

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
name: Cloudflare Purge Cache
on: push

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Sleep for 3 minutes
uses: jakejarvis/[email protected]
with:
time: '3m'

- name: Purge cache From Cloudflare
uses: nathanvaughn/[email protected]
if: success()
env:
CLOUDFLARE_ZONE: ${{ secrets.CLOUDFLARE_ZONE }}
CLOUDFLARE_AUTH_KEY: ${{ secrets.CLOUDFLARE_AUTH_KEY }}

其中获取API KEY的方法可以参考https://github.com/marketplace/actions/cloudflare-cache-purge-action 大佬们英文应该看得懂吧