graphql 解析器优化

Posted

技术标签:

【中文标题】graphql 解析器优化【英文标题】:graphql resolver optimisation 【发布时间】:2018-09-07 13:04:42 【问题描述】:

如果我有架构:

type Query 
  posts: [Post!]!

type Post 
  title: String!
  lotsofdata: String

还有一个解析器:

function posts(parent, args, context, info) 
  return readAllPosts(/*?*/)

还有两个可能的查询。查询 #1:

query 
  posts
    title        
  

和查询 #2:

query 
  posts
    title 
    lotsofdata
  

是否可以优化解析器,以便查询 #1 readAllPosts 仅从数据库中拉回标题,但对于查询 #2,它会拉回标题和很多数据?

我查看了 parent、args、context 和 info 参数,但看不到任何指示解析器是否被调用以响应 #1 或 #2 之类的查询。

【问题讨论】:

刚刚发现这个github.com/graphql/graphql-js/issues/19 似乎相关但已有几年历史。对于使用最新的 graphql 工具执行此操作的任何建议,我将不胜感激。 【参考方案1】:

不确定它是否仍然与您相关,但应该是可能的,您可以查看名为 https://github.com/robrichard/graphql-fields#readme 的库。它将解析解析器函数中的 info 参数。通过这种方式,您可以在解析器中获取有关已执行字段的信息。另一部分是使用此信息来构建正确的 SQL 语句或投影或其他任何内容(取决于您使用的数据库)。我希望,它会有所帮助。 最佳大卫

【讨论】:

这完全正确。你需要 Object.keys off graphql-fields 解析数据。

以上是关于graphql 解析器优化的主要内容,如果未能解决你的问题,请参考以下文章

graphql-yoga - GraphQL 解析器参数在哪里定义和记录?

GraphQL 解析器应该有多懒?

GraphQL 解析器问题

Apollo GraphQL - 未触发解析器

NodeJs 中的 GraphQl - 对象类型的解析器

用 Jest 测试 GraphQL 解析器