与现有模式一起使用
要求
要使用 Grafast 运行现有的 GraphQL 模式,您必须确保以下内容成立
- 您的解析器已内置到您的模式中,这是常态(不是通过
rootValue
传递的) - 如果您的任何解析器使用
GraphQLResolveInfo
(解析器的第四个参数),那么它们不能依赖于path
属性,因为我们目前无法以等效的方式填充它 context
必须是一个对象(任何适合用作WeakMap
键的东西);如果您不需要上下文,那么{}
是完全可以接受的rootValue
(如果指定)必须是一个对象或null
/undefined
(如果您在解析器方面遇到任何问题,请提交问题 - 此约束列表可能不完整。)
安装
确保您已安装 graphql
和 grafast
模块
- npm
- Yarn
- pnpm
npm install --save grafast@beta graphql
yarn add grafast@beta graphql
pnpm add grafast@beta graphql
运行
将任何对 graphql.js 的 graphql
或 execute
函数的调用分别替换为 Grafast 的 grafast
和 execute
。
-import { graphql, execute } from 'graphql';
+import { grafast, execute } from 'grafast';
-const result = await graphql({
+const result = await grafast({
schema,
contextValue: {},
source: ...
缓存解析和验证
此时,您应该能够像以前一样执行您的 GraphQL API,但除非您使用 grafast
函数,否则我们还没有达到最佳状态。
如果没有进一步的干预,直接使用 execute
很可能会导致您每次都规划每个请求,而不是重用操作计划。为了解决这个问题,您应该缓存 GraphQL 请求的解析,以便当再次看到相同的文档时,将相同的解析后的文档 AST 传递给 Grafast。您可以自己处理,使用 grafast
函数,或者使用为您执行此操作的服务器/框架;请参阅 服务器。
用计划替换解析器
Grafast 自动支持解析器(具有上述“要求”),以帮助保持与旧版模式的兼容性,但如果您已准备好获得下一级别的性能,则可以在模式中逐字段地用计划替换解析器。
有关更多信息,请参阅 计划解析器。