ckdot / page-cache
将响应缓存为磁盘上的静态文件,以实现闪电般的页面加载。
Requires
- php: >=5.5.9
- illuminate/contracts: 5.0 - 5.5
- illuminate/filesystem: 5.0 - 5.5
- symfony/http-foundation: ^2.6.0|^3.0.0
Requires (Dev)
- illuminate/container: 5.0 - 5.5
- mockery/mockery: ^0.9.5
- phpunit/phpunit: ^4.8
Suggests
- illuminate/console: Allows clearing the cache via artisan
This package is not auto-updated.
Last update: 2024-09-18 20:23:05 UTC
README
此包允许您轻松地将响应作为磁盘上的静态文件进行缓存,以实现闪电般的页面加载。
简介
虽然像 Jekyll 和 Jigsaw 这样的静态网站生成器在当今非常流行,但动态PHP网站仍然为大多数静态网站提供了很多价值。一个合适的PHP网站允许您轻松地在任何需要的地方添加动态功能,而且也意味着在推送网站更新时不需要进行构建步骤。
话虽如此,对于网站上真正静态的页面,实际上完全没有必要启动完整的PHP应用程序来仅为了服务一个静态页面。从磁盘上服务一个简单的HTML页面要快得多,对服务器的负担也更小。
解决方案?全页缓存。
使用本包中包含的中间件,您可以选择性地将任何给定请求的响应缓存到磁盘上。对同一页面的后续调用将直接作为静态HTML页面提供服务!
安装
使用composer安装page-cache包
$ composer require silber/page-cache
服务提供商
注意:如果您使用Laravel 5.5+,服务提供程序将自动注册。您可以完全跳过此步骤。
打开config/app.php并在providers数组中添加一个新项
Silber\PageCache\LaravelServiceProvider::class,
中间件
打开app/Http/Kernel.php并在web中间件组中添加一个新项
protected $middlewareGroups = [ 'web' => [ \Silber\PageCache\Middleware\CacheResponse::class, /* ... keep the existing middleware here */ ], ];
该中间件足够智能,只会缓存具有200 HTTP状态码的响应,并且仅针对GET请求。
如果您只想选择性地缓存对您网站的特定请求,您应向routeMiddleware数组添加一个新的映射
protected $routeMiddleware = [ 'page-cache' => Silber\PageCache\Middleware\CacheResponse::class, /* ... keep the existing mappings here */ ];
一旦注册,您就可以在单个路由上使用此中间件。
URL重写
为了在缓存后直接服务静态文件,您需要正确配置您的Web服务器以检查这些静态文件。
-
对于nginx
更新您的
location块的try_files指令,包括对page-cache目录的检查location = / { try_files /page-cache/pc__index__pc.html /index.php?$query_string; } location / { try_files $uri $uri/ /page-cache/$uri.html /index.php?$query_string; }
-
对于apache
打开
public/.htaccess并在Handle Front Controller标签之前添加以下内容# Serve Cached Page If Available... RewriteCond %{REQUEST_URI} ^/?$ RewriteCond %{DOCUMENT_ROOT}/page-cache/pc__index__pc.html -f RewriteRule .? page-cache/pc__index__pc.html [L] RewriteCond %{DOCUMENT_ROOT}/page-cache%{REQUEST_URI}.html -f RewriteRule . page-cache%{REQUEST_URI}.html [L]
忽略缓存文件
为了确保您不会将本地缓存的文件提交到您的git存储库,请将此行添加到您的.gitignore文件中
/public/page-cache
使用方法
使用中间件
注意:如果您已将中间件添加到全局
web组,则所有成功的GET请求将自动被缓存。无需将中间件直接放在路由上。如果您将其注册为路由中间件,则应在您想要缓存的任何路由上使用该中间件。
要缓存特定请求的响应,请使用page-cache中间件
Route::middleware('page-cache')->get('posts/{slug}', 'PostController@show');
现在每个帖子都将被缓存到public/page-cache目录下的文件中,与请求的URL结构非常相似。对这篇文章的所有后续请求都将直接从磁盘上提供,甚至不会触及您的应用程序!
清除缓存
由于响应被缓存为静态文件,因此您的应用程序中这些页面的任何更新都不会反映在您的网站上。要更新网站上的页面,您应使用以下命令清除缓存
php artisan page-cache:clear
一般来说,将此内容添加到部署脚本中是一种良好的实践。这样,每次您对网站进行更新时,页面缓存都将自动清除。
如果您使用的是 Forge 的快速部署功能,您应该将此行添加到部署脚本的末尾。这样可以确保每次您对网站进行更新时,缓存都会被清除。
许可证
页面缓存包是开源软件,遵循 MIT 许可。