JosephSilber/page-cache Laravel 静态页面缓存

码农天地 -
JosephSilber/page-cache Laravel 静态页面缓存

Laravel 页面缓存

这个包允许您轻松地将响应缓存为磁盘上的静态文件,以便更快速地加载页面。

包管理地址:

https://github.com/JosephSilber/page-cache

安装:

用 composer 安装 page-cache 包:

composer require silber/page-cache

服务提供者

注意:如果你使用 Laravel5.5+,service provider 会自动注册,你可以完全忽略这一步骤。

找到 config/app.php 并添加这一段到 providers 数组中:

Silber\PageCache\LaravelServiceProvider::class,

中间件

打开 app/Http/Kernel.php 并添加这行到你的 web 中间件组中:

protected $middlewareGroups = [
    'web' => [
        \Silber\PageCache\Middleware\CacheResponse::class,
    ],
];

这个中间件非常智能,它只会缓存状态码是 200 的 HTTP 的 GET 请求。

如果你想有选择地缓存特定的请求到你的网站,你应该添加新的映射到 routeMiddleware 数组中:

protected $routeMiddleware = [
    'page-cache' => Silber\PageCache\Middleware\CacheResponse::class,
];

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]

使用中间件

注意:如果你添加这个中间件到全局 web 中间件组中,那么所有的成功的 GET 请求都会被缓存下来,这就不需要再把中间件添加到路由中了。

如果您将其注册为路由中间件,那么您应该在要缓存的任何路由上使用中间件。

Route::middleware('page-cache')->get('/', 'HomeController@index');

现在每一篇文章都会缓存在 public/page-cache 目录中,需要完全匹配 URL 结构,所有后续的页面的请求将直接由磁盘提供,甚至都不会去请求你的应用程序!

清除缓存

由于响应作为静态文件缓存到磁盘,所以应用程序中这些页面的任何更新都不会在您的网站上有所展示,如果要更新您网站上的页面,您应该使用以下命令清除缓存:

php artisan page-cache:clear

一个经验之谈,将这个命令添加到您的部署脚本是一种很好的做法。

这样,无论何时更新代码并推送到您的站点的时候,页面缓存都将自动清除。

注意:由于linux权限限制,使用该命令在根目录必须要有执行权限,因此站点不大的情况下,可以直接用程序循环删除/puclic/page-cache文件夹的内容

laravel介绍

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数

Tags 标签

laravel页面缓存

扩展阅读