rocketweb / cache-warmer
带有预取选项的缓存预热工具,用于验证Fastly缓存的响应
v1.4
2024-07-30 11:37 UTC
Requires
- php: >=8.1
- ext-curl: *
- ext-dom: *
README
信息
此库允许在处理CDN(目前支持Fastly CDN和Cloudflare)时实现更快的缓存预热。它使用HEAD请求来检查缓存状态。如果缓存状态不是命中,则执行完整页面加载,然后解析css/js/img元素,并请求所有这些元素!
它支持智能缓存,因此您不会反复请求相同的页面/元素!
安装与使用
可以使用composer安装此库
composer require rocketweb/cache-warmer
安装后,您可以使用标准的PSR-4调用加载它。示例代码
<?php
require 'vendor/autoload.php'; // If using directly in a file!
$cacheWarmer = new \RocketWeb\CacheWarmer\CacheWarmer();
$cacheWarmer->run(
'https://domain.com',
[
'/url1.html',
'/url2.html',
...
]
);
输出直接打印,包含以下信息
URL|Element: (cached|processed|skipped) %URL% - %message%
URL|Element => indicates what is being processed.
- URL is a Page URL which was provided in the array.
- Element is js/css/img information that was parsed out from the Page.
cached|processed|skipped => indicates the state.
- cached - the HEAD request returned the proper Cache Header value
- processed - the Cache Header failed, the Page/Element was fetched (loaded)
- skipped - the Page/Element was already requested before (duplicate)
配置
有一些可以配置的事项
- 您可以设置要向服务器执行的并发请求数量(适用于页面和元素)
$batchSize = 20;
$cacheWarmer = new \RocketWeb\CacheWarmer\CacheWarmer($batchSize);
- 您可以绕过特定URL的CDN缓存结果,这将强制加载页面并获取所有元素!
$cacheWarmer->run(
'https://domain.com',
[
'/url1.html' => true, // setting the value as true will skipp the CDN Cache validation and do full load!
'/url2.html',
...
]
);
- 您可以为在页面中处理元素时使用备用域名设置(例如 - 您的媒体来自不同的域名)。您需要在调用
->run()
之前设置此设置
$cacheWarmer->setAllowedBaseUrls([
'https://cdn.something.net/',
'https://media.somethingelse.net/'
]);
$cacheWarmer->run( ...
- 您可以指定用于与CDN缓存验证匹配的自定义头和值。验证是通过部分匹配(针尖在沙堆中)完成的。您需要将额外的配置传递到
->run()
方法
$cacheWarmer->run(
'https://domain.com',
[
... // URLs to check
],
[
'header_key' => ['value', ...]
]
);
配置与默认值合并(支持Fastly和Cloudflare)
\RocketWeb\CacheWarmer\Resource\Page
private const DEFAULT_HEADERS = [
'x-cache' => ['HIT'],
'cf-cache-status' => ['HIT']
];
例如,如果您想将DYNAMIC传递给Cloudflare作为缓存
$cacheWarmer->run(
'https://domain.com',
[
'/url1.html',
'/url2.html',
...
],
[
'cf-cache-status' => ['HIT', 'DYNAMIC']
]);