首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Hugo 网站优化(9): 实时更新与缓存加速兼顾, 使用 Github Action 主动预热 CDN 缓存

Hugo 网站优化(9): 实时更新与缓存加速兼顾, 使用 Github Action 主动预热 CDN 缓存

作者头像
老麦
发布2023-02-25 19:46:44
发布2023-02-25 19:46:44
3.2K0
举报
文章被收录于专栏:Go与云原生Go与云原生

Hugo 网站优化(9): 实时更新与缓存加速兼顾, 使用 Github Action 主动预热 CDN 缓存

原文链接: https://tangx.in/posts/2023/01/04/hugo-qcloud-cdn-purge-and-push/

Github Page 实现的 纯静态 网站加 CDN 就是麻烦。

  1. 缓存时间设置短了, 回源网站打开慢。
  2. 缓存时间设置长了, 发布新文章又很长时间无法展示。

于是, 我又盯上了 Github Action 的实现发布文章后主动预热网站, 这样在 CDN 中的缓存配置就更通用了。

cdn-node-cache

实际上, 这里可以设置为全站 90 天, 或者更长时间。

先说逻辑

本来整条链路应该是像下面这样串行的。

代码语言:javascript
复制
# 1. 串行逻辑
hugo --推送--> github --发布--> website --触发--> CDN 刷新后预热

但是, 由于种种无法控制的因素, 无法实现

  1. Github 自定义 发布网站的 action 配置真的是太难了, 文档看了好久都没实践出来。
  2. 腾讯云CDN 刷新 完成时间不定,
    1. 根据 刷新内容多少 以及 其他不可控因素 相关。
    2. 由于 Github Action 的个人配额有时长限制, 无法一直等待。另外 刷新预热 都是异步任务, 串行等待太浪费。

因此, 将逻辑改成了

代码语言:javascript
复制
# 1. 发布
hugo --推送--> github --发布--> website
                     └--等待--> CDN 刷新 + 预热

# 2. 定时任务
github --定时任务--> 预热

站点地图(sitemap)

sitemap 是我们的站点地图, 用于给搜索引擎网站的地址清单, 便于收录。

sitemap 具有固定的结构

代码语言:javascript
复制
<urlset>
    <url>
        <loc>https://tangx.in/categories/</loc>
        <lastmod>2023-01-04T08:09:37+08:00</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>https://tangx.in/tags/kubernetes/</loc>
        <lastmod>2023-01-03T18:15:50+08:00</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
</urlset>

更多细节可以参考官网的 SiteMap 协议[1]

在 sitemap 中可以看到

  1. loc: 目标网址
  2. lastmod: 最后更新时间

这两个字段对我们刷新网站很重要。

确定刷新和预热的内容

sitemap 中可以得到所有的页面地址, 豪横一点就全部刷新了。

话虽这样说, 但事不能这样做。

结合字段 lastmod, 判断最后更新时间在 N 天内就更新。

这里就需要养成良好的书写习惯, 每次更新都要修改文档的最后更新时间。

以下是文章的元数据信息

代码语言:javascript
复制
---
title: "Hugo 网站优化(9): 预热网站, 使用 Github Action 主动刷新 DNS 缓存"
subtitle: "Hugo Qcloud Cdn Purge And Push"
date: "2023-01-04T16:35:49+08:00"
lastmod: "2023-01-04T16:35:49+08:00"
---

腾讯云实现刷新和预热工具

不得不说, 现在大厂的业务能力真的太好的。简单 API 调用功能, 基本可以直接复制 DEMO, 稍微修改修改就可以用了。

  • 刷新URL: https://cloud.tencent.com/document/api/228/37870
  • 预热URL: https://cloud.tencent.com/document/api/228/37869

Github Action 定时任务

Github Action 定时任务触发事件是根据 UTC 时间。不能 设置 触发 时区。

换句话说, 如果想要实现 CST 触发时区, 需要自行计算 cron 的时间配置。

以下是 预热 网站的 workflow 配置

代码语言:javascript
复制
on:
  push:
    branches:
      - master
      - main
 schedule:
    #  UTC 16:00 -> CST 00:00
    # - cron: "10 17 * * *"  # UTC 17:00 -> CST 01:00 (day+1)
    - cron: "31 * * * *" # 每小时预热

我们这里设置为 每小时预热 网站一次

参考资料

[1]

SiteMap 协议: https://www.sitemaps.org/protocol.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 熊猫云原生Go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hugo 网站优化(9): 实时更新与缓存加速兼顾, 使用 Github Action 主动预热 CDN 缓存
    • 先说逻辑
    • 站点地图(sitemap)
      • 确定刷新和预热的内容
    • 腾讯云实现刷新和预热工具
    • Github Action 定时任务
      • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档