valu / 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 auto-updated.
Last update: 2024-09-22 17:39:36 UTC
README
警告:这是一个 alpha 版本,功能尚未完善。
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)
清除该区域。
区域是一个缓存区域,缓存将存储到该区域。需要区域是因为缓存响应被写入多个缓存密钥,因为 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 配备了一个非常简单的构建查询性能工具,该工具会在 /graphql
响应中添加一个 x-graphql-duration
标头。它包含实际的 GraphQL 响应 解析 的时间(以毫秒为单位)。当缓存未命中时,这是此插件可以从响应时间中提取的理论最大值。其余时间都花费在在 GraphQL 解析器执行之前设置 WP 和 WPGraphQL 本身。
如果您想超越这个,您可以在 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( [ 'base_directory' => '/custom/path', 'directory_permissions' => '0770', 'file_permissions' => '0660', ] ); });
文件系统
这是默认后端,将缓存写入 /tmp/wp-graphql-cache
。它不是超级快,但如果有 RAM 磁盘作为后盾,它也可以合理地执行。
暂存
这是一个缓存存储后端,它将缓存写入 WordPress 暂存。
这是一个灵活的缓存存储后端,因为真正的存储可以在平台级别通过使用对象缓存进行配置。默认情况下,如果没有定义对象缓存,WordPress 将将暂存作为选项存储在数据库中。
例如,单个服务器环境可能使用APC对象缓存,而高可用性(HA)环境可能使用Memcached或Redis后端。
OPCache
待办事项
自定义后端
只要自定义后端扩展自\WPGraphQL\Extensions\Cache\Backend\AbstractBackend
,它也可以被返回。