网站预缓存脚本,全量拉取sitemap
里面的网址来实现预缓存,支持使用CDN
或本地有静态缓存的网站。
之前网站虽然使用了百度CDN
,但源站在Vercel
上,回源较慢,导致访问速度不佳,后来想反正是静态,直接全部预缓存,全部交给百度云加速.
在论坛请教了大佬,配置了自定义页面,使用笨方法,用IDM
抓全站,好在页面不多,所需时间不算太长,也是很麻烦.
昨天在zhang.ge博客看到了他写的预缓存脚本,自己测试了一下,效果很好,推荐给大家.
开源地址: https://github.com/jagerzhang/Pre-cache
使用方法
首先需要站点地图 stiemap.xml
, 脚本是按照站点地图索引模拟访问预缓存的. 各程序均有插件,自行安装调试
基于Docker运行
安装Docker
,拉取镜像 jagerzhang/pre-cache:latest
然后依次执行
1 | docker run --rm --net=host -ti jagerzhang/pre-cache:latest \ |
如果是拉取DockerHub
的速度太慢,也可以先在本地编译Docker
镜像,再跑上面的命令,编译方法如下:
1 | git clone https://github.com/jagerzhang/Pre-cache.git |
基于代码运行
基于代码运行需要先初始化一下Python
环境,按装工具所依赖的组件,具体命令如下:
1 | git clone https://github.com/jagerzhang/Pre-cache.git |
依赖环境初始化完成后,执行如下命令开始预缓存:
1 | python pre_cache.py \ |
基于对象引用
同样工具也支持在其他Python
脚本中来作为对象引用,示例代码如下:
1 | from pre_cache import preCache |
结果预览
参数说明
参数 | 必须 | 默认值 | 说明 |
---|---|---|---|
–sitemap / -s | 是 | 无 | 指定网站地图sitemap文件网址,必须为xml文件格式。 |
–cacheheader / -c | 否 | 无 | 指定响应头里面的缓存标识名称,比如CF为cf-cache-status,不指定不影响功能,但是无统计信息。 |
–host / -H | 否 | 无 | 指定具体主机来访问页面,即绕过CDN或代理访问真实主机,支持端口,比如 127.0.0.1:8080 |
–size / -S | 否 | 20 | 指定预缓存时并发访问的数量,并非越大越好,需要自定测试整体耗时来得出最佳值。 |
–useragent / -u | 否 | 见说明 | 自定义请求时的User-Agent标识来模拟客户端,默认值:Pre-cache/python-requests/xx.xx。 |
–timeout / -t | 否 | 10 | 指定单个请求的超时时间,默认10秒。 |
–timeout / -t | 否 | False | 是否验证SSL证书,保持默认即可,开启验证可能无法支持指定–host来预缓存。 |
sitemap
整个工具的原理是先请求sitemap
内容,然后对sitemap
里面的url
进行爬扫,因此--sitemap
这个参数是必须参数,指定为网站的sitemap
地址即可,比如:--sitemap=https://www.uzz5.com/sitemap.xml
,需要注意的是这个xml
必须是xml
格式,这里推荐使用zhang.ge
博客之前分享的sitemap纯代码版本。如果是用插件生成的,可能是多个sitemap
地址,然后有一个汇总的sitemap
导航,这种情况的话只需要将这个参数指定为具体的分页sitemap
地址,且需要分别执行多次。
cacheheader
这个参数是指定网页被缓存后,Header
头部中的HIT标识,常见的头部标识如下:
缓存类型 | 头部名称 | 常见值 |
---|---|---|
Nginx 缓存 | X-Cache/或自定义 | HIT,MISS,EXPIRED,BYPASS |
CloudFlare | cf-cache-status | HIT,MISS,EXPIRED,BYPASS |
腾讯云CDN | x-cache-lookup | HIT/MISS/EXPIRED/BYPASS From Upstream/XXX |
阿里云CDN | X-Cache | HIT,MISS,EXPIRED,BYPASS |
如果不在上述类别或者自定义过,我们也可以通过浏览器开发者模式查看,方法为:浏览器打开页面–>F12
–>NETWORK
–>刷新–>查看响应头:
host
这个参数就比较实用了,可以指定真实IP来访问网页,且支持自定义端口。比如 –host=127.0.0.1 或 –host=127.0.0.1:8080,指定后工具将会请求到指定的主机进行资源拉取实现指定节点预缓存。比如张戈博客开了CDN缓存同时本地也开启了Nginx缓存,我就可以如下分2步执行:
1 | 先本地预缓存: |
定时任务
上文已经详细介绍了如何运行这个工具,那接着我们需要通过crontab
添加一个定时任务,定期进行预缓存。
1 | !/bin/bash |
然后在系统crontab
里面添加一个定时任务,每小时执行一次:
1 | 进入定时任务编辑,插入如下命令行: |
宝塔
很多小伙伴使用宝塔面板,可以在计划任务内添加任务
记得删除
\
,修改为一句命令,否则无法正常运行.
其他
本文仅做引介, 原文地址: https://zhang.ge/5154.html
更多请前往原文评论反馈,或提交issues