wp-graphql / wp-graphql-smart-cache
为WPGraphQL提供智能缓存和缓存失效
Requires
- appsero/client: ^1.2
Requires (Dev)
- appsero/client: ^1.2
- automattic/vipwpcs: ^2.3
- axepress/wp-graphql-stubs: ^1.14
- codeception/module-asserts: ^1.3.1
- codeception/module-cli: ^1.1
- codeception/module-db: ^1.1
- codeception/module-filesystem: ^1.0
- codeception/module-phpbrowser: ^1.0
- codeception/module-rest: ^1.3
- codeception/module-webdriver: ^1.2
- codeception/util-universalframework: ^1.0
- lucatume/wp-browser: ^3.0
- php-webdriver/webdriver: ^1.11
- phpcompatibility/phpcompatibility-wp: *
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpunit/php-timer: ^5.0
- squizlabs/php_codesniffer: ^3.6
- szepeviktor/phpstan-wordpress: ^1.3
- wp-coding-standards/wpcs: ^2.3
- wp-graphql/wp-graphql: ^1.14
- wp-graphql/wp-graphql-testcase: *
- dev-main
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0
- v0.3.9
- v0.3.8
- v0.3.7
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- v0.1.2
- v0.1.1
- v0.1.0
- dev-fix/queryid-not-outputting-keys
- dev-chore/fix-docker-commands
- dev-feat/on-demand-revalidation-webhooks
- dev-feat/rebrand
- dev-release/v1.3.2
- dev-ci/test-against-6.5
- dev-release/v1.3.1
- dev-fix/#265-improve-clarity-on-settings-page
- dev-fix/260-invalidate-menus
- dev-release/v1.3.0
- dev-fix/force-enable-query-analyzer
- dev-release/v1.2.1
- dev-feat/#263-test-wp6.4
- dev-release/v1.2.0
- dev-bug-mutation-should-not-cache
- dev-ci/#228-tests-failing-after-wpgraphql-1.14.5
- dev-release/v1.1.3
- dev-fix/#229-disable-maps-when-object-cache-is-off
- dev-bug/#225-over-purging-connections
- dev-release/v1.1.1
- dev-fix/#220-menus-are-considered-private-even-if-model-has-been-filtered-to-public
- dev-release/v1.1.0
- dev-fix/#212-over-purging-tags
- dev-feat/#213-graphql_purge_logs
- dev-release/v1.0.4
- dev-fix/post_exists-error
- dev-fix/#206-ignore-apple-news-meta-key
- dev-release/v1.0.2
- dev-release/v1.0.1
- dev-fix/public-visible-queries
- dev-bug/purge-all-varnish-cache
- dev-trunk
- dev-release/v1.0
- dev-fix/vendor-dir-not-deployed
- dev-feat/add-wordpress-org-deploy
- dev-release/v0.3.4
- dev-bugfix/update-min-version-constant-name
- dev-bug/#183-update-min-version-of-wpgraphql-to-check
- dev-release/v0.3.2
- dev-feat/#177-exclude-specific-queries
- dev-fix/#176-fatal-error-for-composer-installs
- dev-bug/add-header-support-for-when-queryId-is-used
- dev-release/0.2.1
- dev-release/v0.2.0
- dev-feature/move-cache-key-generation-to-wpgraphql-core
- dev-feature/#165-async-purge
- dev-fix/max-age-batch
- dev-add/comment-cache-eviction
- dev-release/v0.1.2
- dev-refactor/save-urls
- dev-fix/batch-queries
- dev-fix/purge-all-callback
- dev-bug/#154-broken-tests-for-post-invalidation
- dev-ci/add-pr-artifact
- dev-release/v0.1.1
- dev-feature/add-extension-output-when-response-is-cached
- dev-feature/graphql-document-not-publicly-queryable
- dev-feature/rename-to-wp-graphql-smart-cache
- dev-admin/update-settings-text
- dev-feature/remove-graphiql-extension
- dev-fix/wp-cache-save-to-array
- dev-bugfix/evict-caches-after-delete-user-and-reassign
- dev-add/gh-action-zip
- dev-refactor/purge_nodes_cb
- dev-feature/tests/post-tests
- dev-update/editor-content-text
- dev-fix/list-invalidation-ids
- dev-bug/fix-apollo-client-error
- dev-feature/tests/user-tests
- dev-feature/publish-post-tests
- dev-feature/purge-lists
- dev-feature/purge-settings
- dev-feature/update-abstract-connection-callback-to-track-possible-types
- dev-feature/add-wpgraphql-testcase
- dev-feature/add-wp-graphql-testcase
- dev-feature/purge-metadata
- dev-tests/cache-storage
- dev-bug/url-encode-not-purging
- dev-feature/#49-edit-and-save-documents
- dev-feature/purge-posts-cache
- dev-feature/admin-cache-purge
- dev-feature/delete-terms-with-query
- dev-feature/object-cache
- dev-feature/graphiql-integration
- dev-feature/cache_ttl
- dev-feature/scaffold-document-editor
This package is auto-updated.
Last update: 2024-09-04 17:02:16 UTC
README
WPGraphQL Smart Cache
你希望你的API数据是快速还是准确?使用WPGraphQL Smart Cache,你可以两者兼得。
WPGraphQL Smart Cache是一个免费的开源WordPress插件,提供对WPGraphQL查询的缓存和缓存失效的支持。
为了充分利用此插件,我们建议使用带有网络缓存的GET请求,这要求你的WordPress安装在一个支持的托管。
重大更改:我们可能将来会做出重大更改以改进功能和体验。如果我们这样做,我们将使用semver来完成。在更新之前请注意发布说明和升级通知。
视频概述
文档 📖
概述
WPGraphQL已经成为构建无头WordPress体验的标准。
GraphQL的灵活性和工具很有吸引力,但这也可能带来代价。
性能问题
"最快的代码是根本不运行的代码" - Robert Galanakis
WPGraphQL通过使用DataLoader方法和其他技术来优化运行时性能,从而减少运行时执行成本,但事实是,WPGraphQL是基于WordPress构建的,并尊重WordPress应用程序层——包括操作、过滤器、认证规则和WordPress数据库结构。
这意味着每次执行WPGraphQL请求(就像向WordPress发出的任何类型请求一样)都会产生成本,有时这种成本可能是个问题。
加载WordPress最快的方法之一就是防止WordPress被加载!
对于WPGraphQL来说也是如此。
解决性能问题
这就是WPGraphQL Smart Cache发挥作用的地方。
WPGraphQL Smart Cache与多层缓存集成,为WPGraphQL用户提供快速且准确的数据管理,这些数据在WordPress中管理。
对WPGraphQL Smart Cache的过度简化是捕获GraphQL请求的结果,将响应存储在缓存中,并在未来的请求中使用缓存的响应而不是在每次请求时执行查询及其所有解析器。
🚀 快速入门
此快速入门指南将涵盖WPGraphQL查询的对象缓存和缓存失效的基本知识。
如果你的WordPress安装是在一个受支持的托管主机上,那么你将更多地受益于网络缓存,我们建议你访问网络缓存快速入门,而不是使用此快速入门。如果你不在受支持的托管主机上,告诉你的托管服务商查看我们的托管指南,然后继续使用下面的快速入门指南。
📖 快速入门指南
安装 & 激活
如果你尚未安装和激活 WPGraphQL Smart Cache 插件,请按照安装 & 激活指南进行操作,然后返回此处。
启用 WPGraphQL 对象缓存
安装并激活了最新的 WPGraphQL 和 WPGraphQL Smart Cache 版本后,导航到 WordPress 控制面板中的“WPGraphQL > 设置”页面,然后选择“缓存”选项卡。
在此设置页面中,勾选“使用对象缓存”设置,然后点击“保存更改”。
这将激活 WPGraphQL 查询的对象缓存功能。
启用 WPGraphQL 追踪(可选)
在测试过程中,你可以启用“WPGraphQL 追踪”以查看有关 GraphQL 请求中每个字段解决所需时间(以微秒为单位)的数据。
要启用 WPGraphQL 追踪,请导航到“WPGraphQL > 设置”页面并选择“WPGraphQL 一般设置”选项卡。
勾选“启用 GraphQL 追踪”选项,并将“追踪角色”设置为“任何”。这将使我们能够在测试缓存功能时看到公开请求的追踪数据。
注意:当你完成测试后,请考虑禁用追踪,因为它是一个调试工具,并且它会增加客户端应用程序从 WPGraphQL 服务器下载的响应的重量。
使用 GraphiQL IDE 执行查询
接下来,导航到 WordPress 控制面板中的“GraphQL > GraphiQL IDE”屏幕。
在 IDE 中粘贴以下查询。
{ posts { nodes { id title uri } } }
按下播放按钮以执行查询。
注意:为了确保你的 GraphiQL IDE 不是以登录用户身份执行,请将“播放”按钮右侧的按钮切换。如果显示绿色状态指示器,则请求将被认证并将绕过缓存。公开的非认证请求将从缓存中提供。
你应该看到以下截图类似的结果
如果你检查响应,你将注意到“extensions”有效载荷下的“graphqlSmartCache”键和嵌套的“graphqlObjectCache”键。
如果“graphqlObjectCache”键的值为空,则请求没有从缓存中提供。
如果你启用了 GraphQL 追踪,请查看`extensions.tracing"有效载荷。
你将看到“duration”字段,这是查询解决的总时间(以微秒为单位)。
请注意此值。对我来说,它是:"duration": 23271,
此外,你还将看到有关每个已解决字段的很多数据。你不需要这些数据,只需注意其存在即可。
再次执行查询
再次执行相同的查询(仍然是非认证请求)。
这次,你应该观察到`graphqlSmartCache.graphqlObjectCache`键将返回数据。
你应该看到类似以下的有效载荷
{ "data": { ... }, "extensions": { ... "graphqlSmartCache": { "graphqlObjectCache": { "message": "This response was not executed at run-time but has been returned from the GraphQL Object Cache", "cacheKey": "9cc3bbab3abfcc618153b3e9a3df403c2408f1007abe35aeaec0e2d640fb1233" } } } }
这意味着请求是从 WPGraphQL 对象缓存中提供的,而不是执行每个字段的解析器。
如果你启用了 GraphQL 追踪,请再次查看`extensions.tracing"有效载荷。
这次,你应该会看到持续时间字段的值更低。对我来说,值是"duration": 9933
。快了近3倍!
此外,你还会注意到跟踪下的resolvers
字段是空的。这是因为数据是从对象缓存返回的,没有执行任何解析器!
清除缓存
接着再执行几次相同的查询,并注意它仍然是从缓存中提供的。
为了平衡“快速”和“准确”的数据,WPGraphQL Smart Cache会监听WordPress的事件,当相关事件发生时,相关的缓存将被清除,并提供新鲜的数据。
在另一个浏览器标签页中,导航到“文章”页面并快速编辑最近的文章,给标题添加一个句号。
然后,回到打开GraphiQL IDE的浏览器标签页中,再次执行查询。
查询应该是“缓存未命中”,我们应该看到准确、更新的标题,并且在“extensions”下的`graphqlSmartCache.graphqlObjectCache"输出应该是空的。
👉 下一步
现在你已经完成了快速入门,继续了解WPGraphQL Smart Cache插件的更多功能。
特性
其他文档
相关链接 🔗
已知问题
批量查询
目前关于批量查询存在一些问题。如果您在客户端应用程序中使用批量查询,我们还需要更多时间才能让WPGraphQL Smart Cache为您工作。
如果您在使用应用程序时使用批量查询并希望使用WPGraphQL Smart Cache,请在WPGraphQL Smart Cache的Slack频道或GitHub讨论区中告诉我们,以便我们了解更多关于您的用例。
缺少失效钩子
目前,我们缺少与设置(选项)相关的失效钩子。
这意味着当与这些设置相关的操作发生时,请求设置的查询(即常规设置、讨论设置等)的缓存将不会自动失效/清除。
您可以在以下链接中阅读更多关于支持设置的细节:#158
提供反馈
如果您在使用WPGraphQL Smart Cache后有任何反馈,我们非常乐意听到!
问题和错误报告
如果您有问题或错误需要报告,最佳的地方是在GitHub仓库中:https://github.com/wp-graphql/wp-graphql-smart-cache/issues
功能请求
如果您有关于WPGraphQL Smart Cache插件的想法,感觉它将是一个很好的补充,您可以在GitHub仓库的讨论区中告诉我们:https://github.com/wp-graphql/wp-graphql-smart-cache/discussions
一般讨论
如果您想就插件进行一般性讨论,您可以访问WPGraphQL Slack (加入这里) 并加入#wp-graphql-smart-cache
频道,或者在GitHub Discussions中发帖。
安全顾虑
如果您认为在WPGraphQL Smart Cache代码库中发现了可能构成安全顾虑的问题,请通过直接发送电子邮件到info@wpgraphql.com告诉我们。
请勿通过此电子邮件地址发送其他错误报告、功能请求或支持问题。
隐私政策
WPGraphQL Smart Cache使用Appsero SDK在用户确认后收集一些遥测数据。这有助于我们更快地解决问题并改进产品。
Appsero SDK 默认情况下 不会收集任何数据。 SDK 只有在用户通过管理员通知允许的情况下才会开始收集基本遥测数据。我们收集数据以确保所有用户都能获得良好的体验。
集成 Appsero SDK 不会立即 开始收集数据,在任何情况下都需用户确认。
了解 Appsero 如何收集和使用这些数据的更多信息,请参阅隐私政策。