rocketweb/cache-warmer

带有预取选项的缓存预热工具,用于验证Fastly缓存的响应

v1.4 2024-07-30 11:37 UTC

This package is auto-updated.

Last update: 2024-09-30 12:02:07 UTC


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)

配置

有一些可以配置的事项

  1. 您可以设置要向服务器执行的并发请求数量(适用于页面和元素)
$batchSize = 20;
$cacheWarmer = new \RocketWeb\CacheWarmer\CacheWarmer($batchSize);
  1. 您可以绕过特定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',
        ...
    ]
);
  1. 您可以为在页面中处理元素时使用备用域名设置(例如 - 您的媒体来自不同的域名)。您需要在调用->run()之前设置此设置
$cacheWarmer->setAllowedBaseUrls([
    'https://cdn.something.net/',
    'https://media.somethingelse.net/'
]);
$cacheWarmer->run( ...
  1. 您可以指定用于与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']
    ]);