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

简介: 缓存与更新, 主动预热 CDN

<!--

大家好, 我是老麦

欢迎 关注公众号 Go与云原生订阅网站 https://tangx.in/ 第一时间看后续精彩文章。

觉得好的话,请猛击文章右下角「点赞、关注、转发」 一键三连, 是对我的最大支持。

-->

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 天, 或者更长时间。

先说逻辑

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

# 1. 串行逻辑
hugo --推送--> github --发布--> website --触发--> CDN 刷新后预热

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

  1. Github 自定义 发布网站的 action 配置真的是太难了, 文档看了好久都没实践出来。
  2. 腾讯云CDN 刷新 完成时间不定,

    1. 根据 刷新内容多少 以及 其他不可控因素 相关。
    2. 由于 Github Action 的个人配额有时长限制, 无法一直等待。 另外 刷新预热 都是异步任务, 串行等待太浪费。

因此, 将逻辑改成了

# 1. 发布
hugo --推送--> github --发布--> website
                     └--等待--> CDN 刷新 + 预热

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

站点地图(sitemap)

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

sitemap 具有固定的结构

<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 协议

在 sitemap 中可以看到

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

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

确定刷新和预热的内容

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

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

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

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

以下是文章的元数据信息

---
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, 稍微修改修改就可以用了。

Github Action 定时任务

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

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

以下是 预热 网站的 workflow 配置

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 * * * *" # 每小时预热

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

image.png

工具下载

关注公众号, 回复 博客CDN刷新 , 获取最新版本工具下载地址和使用方式。

点个赞, 关注一下呗。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
6月前
|
缓存 前端开发 JavaScript
通过jsDelivr实现Github图床CDN加速
jsdelivr是一个免费的公共CDN(内容分发网络)服务,它允许网站开发者将他们的代码库、JavaScript库、字体和其他资源托管在jsdelivr上,并通过jsdelivr的CDN网络进行快速分发。使用jsdelivr可以有效地减少用户下载资源的时间,提高网页加载速度,同时减轻原始服务器的负载。
424 1
|
6月前
|
缓存 NoSQL Java
SpringBoot实现缓存预热的几种常用方案
SpringBoot实现缓存预热的几种常用方案
|
6月前
|
存储 JavaScript 网络架构
【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
289 3
|
1月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
169 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
|
23天前
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
2月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
3月前
|
前端开发 JavaScript 开发工具
使用jsDelivr和GitHub,上传本地静态资源到免费CDN
本文介绍了一种将本地图片和静态资源(如 js、css、文档等)上传至免费CDN的方法,便于随时调用。具体步骤包括:在GitHub创建仓库`resources`存放资源;通过上传或Git命令同步文件;在仓库中创建新版本并发布。之后即可通过指定格式的URL访问这些CDN资源。此方法简单高效,适合开发者快速部署和共享静态内容。
128 2
使用jsDelivr和GitHub,上传本地静态资源到免费CDN
|
3月前
|
Linux C++ Docker
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
|
3月前
|
数据安全/隐私保护
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
|
3月前
|
存储
【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法
【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法