ckdot/page-cache

将响应缓存为磁盘上的静态文件,以实现闪电般的页面加载。

v1.0.1 2018-03-12 20:43 UTC

This package is not auto-updated.

Last update: 2024-09-18 20:23:05 UTC


README

此包允许您轻松地将响应作为磁盘上的静态文件进行缓存,以实现闪电般的页面加载。

简介

虽然像 JekyllJigsaw 这样的静态网站生成器在当今非常流行,但动态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 许可