bnomei / kirby-nitro
Nitro 加速 Kirby 项目中内容的加载速度。
Requires
- php: >=8.2.0
- getkirby/composer-installer: ^1.2
Requires (Dev)
- getkirby/cms: ^4.3.0
- larastan/larastan: ^2.9
- laravel/pint: ^1.13
- pestphp/pest: ^2.24
- pestphp/pest-plugin-type-coverage: ^2.4
- spatie/ray: ^1.41
Suggests
- bnomei/kirby-blueprints: PHP Class-based Blueprints for Kirby CMS for better type safety and code completion.
- bnomei/kirby3-lapse: Cache any data until set expiration time (with automatic keys).
- getkirby/staticache: Static site performance on demand!
Conflicts
README
Nitro 加速 Kirby 项目中内容的加载速度。
商业使用
支持开源!
此插件免费,但如果您在商业项目中使用它,请考虑赞助我或捐款。
如果我的工作帮助您赚了钱,对我来说似乎很公平,我也应该得到一点回报,对吧?
善良一点。分享一点。谢谢。
- Bruno
安装
- 解压 master.zip 到文件夹
site/plugins/kirby-nitro
或 git submodule add https://github.com/bnomei/kirby-nitro.git site/plugins/kirby-nitro
或composer require bnomei/kirby-nitro
清单:何时使用此插件?
- 您在一次请求中加载了超过100但不到2000个模型(页面/文件/用户)?
- 您在项目中少于4000个模型或2 MB的合并TXT文件?
- 如果您加载较少,则不需要任何性能插件,也许除了键值缓存辅助工具之外。
- 如果您加载更多,您应该考虑Boost或Khulan。
- 如果您需要完全并发地处理多个请求,则不应使用此插件。但根据我的经验,大多数 Kirby 项目不需要那样。
全局 & 原子缓存
Nitro 缓存是一个全局缓存。这意味着缓存在所有 HTTP_HOST 环境之间共享。这将使其表现得像一个单一的数据库连接。
Nitro 缓存默认是原子缓存。这意味着缓存将在您的请求整个过程中锁定缓存文件以保持数据一致性。这将使其表现得像具有锁的数据库。
警告
无论您有多少个 php-fpm 工作进程,在 Nitro 处于原子模式时,一次只有一个将运行!这已经警告过您!但这确实是保证数据一致性的唯一方法,而且它仍然会非常快。
用例
此插件将通过提供特殊缓存,以单次请求加载 100-2000 页面模型来加速 Kirby 设置。它解决了我知道的 Kirby 的三个主要性能瓶颈,并在 CLI 和 HTTP 请求之间链接缓存。
它是通过以下方式实现的
- 提供您自己可以使用的常规文件缓存。但缓存总是在每个请求中完全加载,并且只使用单个文件,这使得它非常快。
- 可选地,您可以使用该缓存来存储 UUID 到页面 ID 的关系。因此,对于每个页面模型 UUID 解析,不再需要加载单个文件,缓存将立即准备好它们。
- 它允许您将所选页面/文件/用户模型的 TXT 内容存储在缓存中,以加快内容的加载时间。
- 它使用第二个缓存,该缓存将缓存
Dir::index
结果。这将跳过在缓存中填充完整索引的文件结构步骤,直到您更新任何页面/文件。
设置
对于您希望缓存的每个模板,您需要使用模型通过特质添加内容缓存逻辑。
site/models/default.php
class DefaultPage extends \Kirby\Cms\Page { use \Bnomei\ModelWithNitro; }
或
site/models/article.php
class ArticlePage extends \Kirby\Cms\Page { use \Bnomei\ModelWithNitro; }
注意
您还可以为用户模型使用该特性。文件模型将自动修补。
使用缓存
您可以使用Nitro的单文件缓存来存储自己的键值对,就像在Kirby中的常规缓存一样。
nitro()->cache()->set('mykey', 'value'); nitro()->cache()->set('mykey', 'value', 1); $value = nitro()->cache()->get('mykey'); $value = nitro()->cache()->getOrSet('mykey', fn() => 'value');
Nitro缓存比Kirby的默认缓存更智能一些。它允许您可选地提供键作为数组,它会自动序列化值(就像Kirby字段到它们的->value()
)并且存储值可以被取消。
nitro()->cache()->set(['articles', $page->slug()], $page->title()); nitro()->cache()->set('test', function () { // ... some logic if($cancel) { throw new \Bnomei\Nitro\AbortCachingExeption(); } });
警告
由于Nitro缓存在每个请求时都是完全加载的,因此我建议不要存储太多的数据块(如HTML输出或当总模型数量太多时)。
在Kirby中使用缓存驱动器
您还可以将Nitro的单文件缓存用作Kirby的缓存驱动器。这将允许您在Kirby中为其他扩展进行缓存。
注意
我强烈建议将Nitro缓存用于Kirby的UUID缓存。
site/config/config.php
return [ // ... other options // use nitro as cache driver for storing uuids // instead of the default file-based cache 'cache' => [ 'uuid' => [ 'type' => 'nitro', ], ], // example: in Lapse plugin 'bnomei.lapse.cache' => [ 'type' => 'nitro', ], ];
设置
免责声明
本插件提供“现状”且无任何保证。请自行承担使用风险,并在将其用于生产环境之前自行测试。如果您发现任何问题,请创建一个新问题。
许可
不建议在任何宣传种族主义、性别歧视、恐同、动物虐待、暴力或其他任何形式的仇恨言论的项目中使用此插件。