matepaiva/wp-graphql-cache

WPGraphQL 的灵活缓存框架

安装: 133

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:wordpress-plugin

v0.0.9 2023-06-16 14:54 UTC

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_cacheregister_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,就可以返回自定义后端。