宝塔面板shell脚本访问WordPress站点地图实现全站预缓存

今天老白博客分享的是WordPress优化中较为经典的套路(个人认为)。基于宝塔面板,添加shell脚本,实现自动访问WordPress站点地图中的文章/页面/标签等链接,从而触发我们设置的缓存插件生成对应页面的html静态文件。这样的好处就是,在网站访问者访问我们网站之前,无论哪个页面都已经生成了静态的html文件,就不用再经过PHP处理了,速度非常快。接下来跟大家说说这种方法:

宝塔面板shell脚本访问WordPress站点地图实现全站预缓存

WordPress网站预缓存的概念

在WordPress网站中,预缓存是一种将动态生成的网页内容转换为静态文件(html),并将其存储在缓存中的技术。这样,在后续用户访问相同页面时,可以直接从缓存中获取静态文件,而不需要再执行动态的数据库查询和页面生成过程,从而提高网站的加载速度和性能。

即不用再经过PHP渲染

WordPress网站中预缓存的一些常见应用:

1.缓存插件:WordPress有很多缓存插件可供选择,如W3 Total Cache、WP Super Cache、WP Rocket、litespeed cache等。这些WordPress插件可以自动预缓存网站的页面,并提供配置选项来优化缓存设置。

2.静态页面生成器:一些插件(如StaticPress、Simply Static)或者服务(如WP2Static、Netlify)可以将整个WordPress网站转换为静态HTML文件,并将其存储在服务器上。这样,每次用户访问时,直接提供静态文件,无需执行动态请求。

3.CDN缓存:使用内容分发网络(CDN)可以将网站的静态资源分发到全球各地的缓存节点,加速访问速度并减轻服务器负载。CDN通常会自动缓存网站的静态内容,并提供高速访问。

4.对象缓存:通过使用对象缓存插件(如Redis Object Cache、Memcached),可以将数据库查询结果和其他计算结果缓存在内存中,以减少对数据库的访问。这可以显著提高网站的响应速度。

5.浏览器缓存:通过设置正确的缓存头信息,可以使浏览器在第一次请求后缓存网页内容,并在后续访问时直接从浏览器缓存获取。这样可以减少对服务器的请求,提高页面加载速度。

 

好处就是在用户访问之前,就已经生成了静态缓存,而不是被用户访问触发才生成缓存,那么所有用户来访问几乎都是静态缓存,不管是平均还是总体速度都会有质的提升!

如何实现WordPress全站预缓存

本文是在看到张戈大佬这篇文章后,才开始尝试这种方法的,自己针对宝塔面板和老白博客的实际情况做了一点点修改。

(原文地址:shell脚本实现整站缓存和预缓存https://zhangge.net/5095.html)

以下教程只针对网站已经有缓存功能的,比如上面提到的缓存插件,就是已经能够将你的动态文章内容生成了html文件的。

这里先贴一下张戈大佬的本地sitemap法,就是站点根目录有sitemap.xml文件

本地sitemap法

其目的为:在WordPress站点地图中拉出所有文章地址,使用 wget 或 curl 全部请求一遍即可实现缓存

shell脚本内容(张戈原文,未修改),shell脚本在宝塔面板的使用方法可以看本文第三节

#/bin/bash

#进入到网站根目录,请按实际填写

cd /home/wwwroot/www.xcbtmw.com/

 

#从 sitemap.xml 中取出所有页面地址, 每隔 0.5 秒请求一次,触发缓存。

for url in $(awk -F"<loc>|</loc>" '{print $2}' sitemap.xml)

do

        wget -O /dev/null  $url

        sleep 0.5

done

将此代码按实际修改后保存为 g_cache.sh ,上传到 Linux 系统,比如就放到 /root 目录,新增任务计划,定时运行即可

#每天凌晨 3 点全站预缓存一遍

0 3 * * * bash /root/g_cache.sh  >/dev/null 2>&1

云端sitemap网址法

这个标题名字可能不太恰当,就是说你本地没有sitemap.xml这个文件,但是有站点地图,比如老白博客的为

https://www.xcbtmw.com/wp-sitemap.xml

那么shell脚本就可以这样写(技术有限,有问题欢迎指正哈)

sitemap_url="https://www.xcbtmw.com/wp-sitemap-posts-post-1.xml"  # WordPress站点地图的URL
links=$(curl -s "$sitemap_url" | grep -oP '<loc>K.*?(?=</loc>)')  # 提取站点地图中的链接

for link in $links
do
    echo "Visiting link: $link"
    wget -O /dev/null "$link"  # 发送HTTP HEAD请求访问链接
    sleep 1  # 等待1秒
done

简单解释一下

echo "Visiting link: $link"是用来在控制台输出正在访问的链接,就是下面这个任务执行日志,这个可以根据自己情况删除。

宝塔面板shell脚本访问WordPress站点地图实现全站预缓存

wget -O /dev/null "$link"是用来发送HTTP HEAD请求并访问链接。通过将下载内容保存到/dev/null,实际上并不保存任何文件,只是发送HTTP HEAD请求来获取响应头信息,从而模拟访问链接的行为。

宝塔面板自动执行shell脚本

在宝塔面板的主页——计划任务中,就可以添加了,需要注意的就是脚本的内容和执行周期

宝塔面板shell脚本访问WordPress站点地图实现全站预缓存

宝塔的计划任务非常方便,功能也很多,大家还可以看看“宝塔面板PHP-Nginx-Mysql检测并自动重启Shell脚本代码 ”

https://www.xcbtmw.com/18654.html

本站自用WordPress优化教程:https://www.xcbtmw.com/tag/wordpress_optimization