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刷新 , 获取最新版本工具下载地址和使用方式。

点个赞, 关注一下呗。

相关文章
|
缓存 前端开发 JavaScript
通过jsDelivr实现Github图床CDN加速
jsdelivr是一个免费的公共CDN(内容分发网络)服务,它允许网站开发者将他们的代码库、JavaScript库、字体和其他资源托管在jsdelivr上,并通过jsdelivr的CDN网络进行快速分发。使用jsdelivr可以有效地减少用户下载资源的时间,提高网页加载速度,同时减轻原始服务器的负载。
654 1
|
缓存 NoSQL Java
SpringBoot实现缓存预热的几种常用方案
SpringBoot实现缓存预热的几种常用方案
|
存储 JavaScript 网络架构
【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床
474 3
|
缓存 NoSQL Java
Java项目启动时先加载某些方法可用于redis缓存预热
Java项目启动时先加载某些方法可用于redis缓存预热
150 0
|
12月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
670 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
965 1
|
前端开发 JavaScript 开发工具
使用jsDelivr和GitHub,上传本地静态资源到免费CDN
本文介绍了一种将本地图片和静态资源(如 js、css、文档等)上传至免费CDN的方法,便于随时调用。具体步骤包括:在GitHub创建仓库`resources`存放资源;通过上传或Git命令同步文件;在仓库中创建新版本并发布。之后即可通过指定格式的URL访问这些CDN资源。此方法简单高效,适合开发者快速部署和共享静态内容。
865 5
使用jsDelivr和GitHub,上传本地静态资源到免费CDN
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
缓存 UED CDN
CDN:刷新和预热资源
CDN:刷新和预热资源介绍
338 1
|
缓存 NoSQL Java
面试官:SpringBoot如何实现缓存预热?
面试官:SpringBoot如何实现缓存预热?
277 0