[扩展推荐] Laravel 的整站静态页面缓存

file

「Laravel Page cache」是一款由 Joseph Silber 设计开发的,通过将 HTTP GET 响应做页面静态化缓存处理,以加速页面加载的插件。该插件既可以将所有的路由进行页面静态化缓存,也可以只针对部分路由进行页面静态化处理,因此使用这款插件对整个 PHP 项目都会大有裨益:

虽然近些年类似 Jekyll 和 Jigsaw 这类静态网站构建工具十分流行,不过,PHP 动态网站依然有其实用价值,即使是纯静态网站也是如此。在合适的场景下使用 PHP 来构建网站,可以轻松添加新功能,而无需将更新部分推送到服务器,这样可以避免网站重新构建的步骤。

又或者说,对于完全是静态页面的网站来讲,我完全找不出理由来解释为什么需要将它部署到 Web 服务器中。直接将 HTML 页面部署到磁盘的某个目录中,会比部署在 Web 服务器中要快得多。

在实现页面静态化缓存前,还需要对 Web 服务器进行一些配置,以保证插件可以在缓存目标目录中能够生成静态文件。插件的 readme 文件中有讲解如何配置 Apache 和 Nginx 服务器重写规则的说明。

使用「Laravel Page cache」实现整站页面静态化,配置稍微有些复杂。
如果需要对所有的 HTTP GET 请求的响应进行缓存,需要在 web 中间件组中加入该插件的中间件。

protected $middlewareGroups = [
    'web' => [
        \Silber\PageCache\Middleware\CacheResponse::class,
        /* ... 保留现有的中间件 */
    ],
];

您还可以为此中间件定义个别名,以便其应用于单个路由或路由组:

protected $routeMiddleware = [
    'page-cache' => Silber\PageCache\Middleware\CacheResponse::class,
    /* ... 保留现有的中间件别名 */
];

之后可以在单个路由中使用这个别名:

Route::middleware('page-cache')->get('/example', 'ExampleController);

缓存命中也就意味着 PHP 应用,可以通过使用静态文件提供比 Web 服务器解析更快的服务器响应。

了解更多

扩展包 JosephSilber/page-cache 托管在 GitHub 上。作者 Joseph Silber 是一个活跃的 Laravel 贡献者,同时致力于框架以及提供像 Laravel Bouncer 这样的优秀扩展包(如果你想了解更多,我们对比了 Bouncer 和 Laravel Permission 扩展包)。Joseph 最近提交了一个很好的 PR(Pull Request:合并请求) 给 laravel/framework,增加了传递一个 闭包作为任意帮助函数的第二个参数 的功能。


Practice makes perfect.

原文地址:https://laravel-news.com/page-cache

译文地址:https://learnku.com/laravel/t/10680/exte...

本帖已被设为精华帖!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 11

这个缓存页面存redis吗?

1年前 评论

@flc1125 其实还是有些许不一样的 他那个是后置中间件 然后在nginx上用try_files直接访问文件系统 如果找不到 击穿后端后cache到文件里
您的作品貌似是无论如何都会经过后端 只是结果是从redis等cache种获取

1年前 评论
chenBJ

想问一下首页ajax请求的数据没有生成静态化这个能解决吗
原文:

file

静态后的

file

10个月前 评论
chenBJ

首页中带有中英文切换如何实现静态化缓存

file

10个月前 评论

这个扩展有一个bug,缓存后的页面url带index.php了,好像还去不掉

8个月前 评论
wanghan

@liyu001989 大佬用过这个包吗?我用了以后确实缓存了get请求的页面,但是当我修改了原页面的某个值时候,再请求,就不会去查找缓存页了,而是生成了新的缓存页把原来的覆盖掉,不知道是不是nginx设置的问题,我已经把拓展包中的nginx配置复制到我的nginx中了

5个月前 评论

@wanghan 我遇到了和你同样的问题,我想问下,你是解决了吗?

2个月前 评论
wanghan

@houxin 我解决了,三个月前我描述的问题不对,其实是,pagecache没有找到缓存的页面,所以每次都生成新的

2个月前 评论
wanghan

@houxin 我打赌,99%是你的.htaccess或者nginx.conf没写对

2个月前 评论

@wanghan 是的,出现跟你一样的问题,是我引入错了nginx的伪静态配置,现在服务器上的网站是可以了。但是我本地使用homestead配置nginx的时候,总是出错,后来本地就放弃使用了。不知道你是否遇到这样的问题?

2个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会