matepaiva / wp-graphql-cache
WPGraphQL 的灵活缓存框架
Requires (Dev)
- codeception/module-asserts: ^1.0
- codeception/module-cli: ^1.0
- codeception/module-db: ^1.0
- codeception/module-filesystem: ^1.0
- codeception/module-phpbrowser: ^1.0
- codeception/module-rest: ^1.0
- codeception/module-webdriver: ^1.0
- codeception/util-universalframework: ^1.0
- lucatume/wp-browser: ~2.2
- phpunit/phpunit: ^8.0
- valu/wp-testing-tools: ^0.6.0
- vlucas/phpdotenv: ^4.1
This package is not auto-updated.
Last update: 2024-09-21 19:27:01 UTC
README
警告:这是一个预览版,功能尚不完整。
WPGraphQL Cache
适用于 WPGraphQL v0.9.0 或更高版本的灵活缓存框架
安装
composer require valu/wp-graphql-cache
或者您可以从 Github 的稳定分支克隆到您的插件中
cd wp-content/plugins
git clone --branch stable https://github.com/valu-digital/wp-graphql-cache.git
查询缓存
如果您只想开始缓存一段时间内的所有查询,只需将其添加到主题的 functions.php
或 mu-plugin 中
use WPGraphQL\Extensions\Cache\CacheManager; CacheManager::register_graphql_query_cache([ 'query_name' => '*', 'expire' => 120, // sec ]);
或者您可以针对特定查询
use WPGraphQL\Extensions\Cache\CacheManager; CacheManager::register_graphql_query_cache([ 'query_name' => 'MySlowQuery', 'expire' => 120, ]);
字段缓存
假设您有一个大查询获取各种内容,其中大多数都相当快,但有一个太慢。您可以使用 register_graphql_field_cache()
针对那个单独的根字段。
use WPGraphQL\Extensions\Cache\CacheManager; CacheManager::register_graphql_field_cache([ 'query_name' => 'MyBigQuery', 'field_name' => 'menuItems', 'expire' => 120, // sec ]);
这将开始缓存名为 MyBigQuery
的 GraphQL 查询上的 menuItems
根字段,时间为 120 秒。
区域缓存控制
您可以使用 CacheManager::clear()
清除所有 GraphQL 缓存,但如果您想要更具体地清除缓存,必须传递一个 zone
属性到 register_graphql_query_cache
和 register_graphql_field_cache
,然后您可以使用 CacheManager::clear_zone($zone)
清除该区域。
zone
是缓存存储的区域。由于 GraphQL 变量和当前用户可能在调用相同查询之间更改,因此需要多个缓存键来写入缓存响应,因此需要区域。
可以使用 CacheManager::clear_zone()
清除区域。
/** * Register cache to a 'menus' zone */ CacheManager::register_graphql_field_cache([ 'zone' => 'menus', // 👈 'query_name' => 'MyBigQuery', 'field_name' => 'menuItems', 'expire' => 120, // sec ]); /** * Clear the zone 'menus' when the menus are updated */ add_action('wp_update_nav_menu', function () { CacheManager::clear_zone('menus'); });
您还可以在多个缓存之间共享相同的区域。
WP CLI
您也可以使用 WP CLI 清除区域。
$ wp graphql-cache clear # clear all zones
$ wp graphql-cache clear --zone=menus
性能测量
WPGraphQL Cache 附带一个非常简单的构建查询性能工具,它将 x-graphql-duration
标头添加到 /graphql
响应中。它包含实际 GraphQL 响应 解析 的时间(以毫秒为单位)。当没有缓存命中时,这是此插件可以从响应时间中提取的理论最大值。其余时间都花在设置 WP 和 WPGraphQL 本身以及 GraphQL 解析器执行之前。
如果您想超越这一点,可以在 WPGraphQL Lock 插件中启用带有持久查询的 GET 请求,并在边缘服务器(nginx、varnish、CDN 等)中缓存整个响应。这将是最优的缓存,因为缓存命中时不会调用 PHP 解释器。
存储后端
有一些存储后端可供选择,可以使用 graphql_cache_backend
过滤器进行配置。
use WPGraphQL\Extensions\Cache\Backend\FileSystem; add_filter('graphql_cache_backend', function () { return new FileSystem('/custom/path'); });
FileSystem
这是默认后端,将缓存写入 /tmp/wp-graphql-cache
。它不是很快,但如果有 RAM 磁盘支持,可以合理地运行。
OPCache
待办事项
自定义后端
只要它扩展自 \WPGraphQL\Extensions\Cache\Backend\AbstractBackend
,就可以返回自定义后端。