[扩展推荐] 三个 Laravel 的 HTTP 缓存扩展包推荐
我们写过 Joseph Silber 的 Laravel页面缓存 包,这个包为 Laravel 提供了静态 HTTP 响应缓存。在 Laravel 中还有其它一些针对静态 HTTP 响应缓存的开源包, 所以我们认为我们应该整理一个关于 HTTP 缓存包的列表,供大家查看。这些 HTTP 缓存包都有独特的功能,使得它们在处理一些相似功能时会有不同的表现,所以需要根据需求来选择扩展。
barryvdh/laravel-httpcache
Barry vd. Heuvel 的 barryvdh/laravel-httpcache
扩展包 --- 最初在2013年为 Laravel 4.1 而生 --- 现在 Laravel 5 也适用。
该包使用 barryvdh/laravel-stack-middleware
与 Laravel 5 一起使用 StackPHP 中间件 ,从而允许你的 Laravel 应用使用 HTTPCache。
使用这个包,你可以为响应页面设置一个生命周期 TTL 或者 最大缓存时间。
Route::get('my-page', function(){
return Response::make('Hello!')->setTtl(60); // 缓存 1 分钟
});
你也可以使用路由中间件:
protected $routeMiddleware = [
// ...
'ttl' => \Barryvdh\HttpCache\Middleware\SetTtl::class,
];
Route::get('my-page', function(){
return 'Hello'
})->middleware('ttl:60'); // 缓存 1 分钟
点击 barryvdh/laravel-httpcache GitHub repo 查看更多信息。
spatie/laravel-responsecache
Spatie的 laravel-responsecache 扩展包缓存全部响应以加速你的 Laravel 应用。我喜欢这个扩展包,它利用了现有的定义在 config/cache.php
文件 的缓存驱动(比如 redis, file, memcached ) 。
你可以使用中间件定义一个指定缓存时间的路由群组:
Route::group(function() {
Route::get('/another-special-snowflake', 'AnotherSnowflakeController@index');
Route::get('/yet-another-special-snowflake', 'YetAnotherSnowflakeController@index');
})->middleware('cacheResponse:10');
这个扩展包另一个实用的功能是可以在程序中清除整个缓存或特定的URIs:
ResponseCache::clear();
// 清除几个 URIs
ResponseCache::forget(['/some-uri', '/other-uri']);
或者使用artisan命令
php artisan responsecache:clear
该扩展包还允许你提供一个自定义的缓存配置文件,它必须实现给定的 CacheProfile
接口。定义一个自定义的缓存配置文件可以让你精确的控制哪些请求被缓存以及缓存时间长短。
silber/page-cache
Joseph Silber 的 Laravel Page Cache 扩展包是另一个 HTTP 缓存包,是静态网站建设者极好的选择。 你可以从静态网站获得很好的性能,没有额外的生成步骤,也不会牺牲通过 PHP 实现完全动态功能的能力。
这个包的工作原理是通过路由中的中间件来生成静态的HTML文件。和串行服务器配合工作时,像 Nginx 之类的,缓存响应不会触及到应用服务器:
对于真正的静态页面,真的没有理由必须通过 PHP 来展示静态页面。 直接从磁盘提供HTML页面读取速度更快,更节省服务器开销。
解决方案? 整页缓存。
使用这个包里的中间件,对自任何指定的请求,你都可以有选择的进行静态缓存。 之后访问的这个页面将直接返回静态的 HTML 页面!
无论你想缓存你所有的路由还是永不变更的几个选定的路由,这个包提供了一个完美的方法来减轻你的 PHP 应用的请求压力,并且让 Nginx 能够给静态文件提供闪电般快速的请求。
其它?
你在 Laravel 中有用任何其它的包来做 HTTP 缓存么?在 Twitter @laravelnews 上告诉我们!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
laravel-responsecache 这个怎么返回304状态码么?
很难受现在才看到这个文章!!!