barryvdh / laravel-httpcache
Laravel的HttpCache
v1.0.1
2024-03-09 19:22 UTC
Requires
- php: ^8
- barryvdh/laravel-stack-middleware: ^1.0
- illuminate/support: ^9|^10|^11.0
- symfony/console: ^6|^7.0
- symfony/http-kernel: ^6|^7.0
Requires (Dev)
- orchestra/testbench: ^7|^8|^9.0
README
Laravel可以使用HttpKernelInterface 中间件,因此也可以使用HttpCache。此包提供了一个简单的 ServiceProvider,以帮助您开始使用 HttpCache。
首先,使用 composer 安装此包
composer require barryvdh/laravel-httpcache
更新后,将 ServiceProvider 添加到 app/config/app.php 中的 providers 数组
'Barryvdh\HttpCache\ServiceProvider',
现在您可以添加 Middleware 到您的 Kernel
'Barryvdh\HttpCache\Middleware\CacheRequests',
缓存现在已启用,针对公共响应。只需设置 Ttl 或 MaxSharedAge
Route::get('my-page', function(){ return Response::make('Hello!')->setTtl(60); // Cache 1 minute });
您可以使用提供的 SetTtl
middleware 来简化这一过程
protected $routeMiddleware = [ // ... 'ttl' => \Barryvdh\HttpCache\Middleware\SetTtl::class, ]; Route::get('my-page', function(){ return 'Hello' })->middleware('ttl:60'); // Cache 1 minute
发布配置以更改一些选项(缓存目录、默认 Ttl 等)或启用 ESI。
$ php artisan vendor:publish --provider="Barryvdh\HttpCache\ServiceProvider"
直接方法,不使用 ServiceProvider
注意:这仍处于测试阶段,请谨慎测试。它应该更快,但灵活性较低,因为它启动较早。
您也可以将 Kernel 包裹在 HttpCache 中,在您的 public/index.php 中。替换 '运行应用程序' 部分如下
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$kernel = \Barryvdh\HttpCache\CacheKernel::wrap($kernel);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
ESI
在您的配置文件中启用 ESI 并将 Esi Middleware 添加到您的 Kernel
'Barryvdh\HttpCache\Middleware\ParseEsi',
现在您可以在布局中定义 ESI 包含
<esi:include src="<?= url('partial/page') ?>"/>
这将渲染部分/页面,具有自己的 Ttl。页面的其余部分将保持缓存(使用自己的 Ttl)
清除/刷新缓存
您可以清除单个 URL 或仅删除整个缓存目录
App::make('http_cache.store')->purge($url); \File::cleanDirectory(app('http_cache.cache_dir'));
或使用 Artisan httpcache:clear
命令
$ php artisan httpcache:clear
更多信息
有关更多信息,请阅读关于 Symfony HttpCache 的文档