跳至主要内容

与现有模式一起使用

要求

要使用 Grafast 运行现有的 GraphQL 模式,您必须确保以下内容成立

  • 您的解析器已内置到您的模式中,这是常态(不是通过 rootValue 传递的)
  • 如果您的任何解析器使用 GraphQLResolveInfo(解析器的第四个参数),那么它们不能依赖于 path 属性,因为我们目前无法以等效的方式填充它
  • context 必须是一个对象(任何适合用作 WeakMap 键的东西);如果您不需要上下文,那么 {} 是完全可以接受的
  • rootValue(如果指定)必须是一个对象或 null/undefined

(如果您在解析器方面遇到任何问题,请提交问题 - 此约束列表可能不完整。)

安装

确保您已安装 graphqlgrafast 模块

npm install --save grafast@beta graphql

运行

将任何对 graphql.js 的 graphqlexecute 函数的调用分别替换为 Grafast 的 grafastexecute

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

有关更多信息,请参阅 计划解析器