与现有模式一起使用
要求
要使用 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 自动支持解析器(具有上述“要求”),以帮助保持与旧版模式的兼容性,但如果您已准备好获得下一级别的性能,则可以在模式中逐字段地用计划替换解析器。
有关更多信息,请参阅 计划解析器。