首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express GraphQL TTFB非常长

Express GraphQL TTFB非常长
EN

Stack Overflow用户
提问于 2019-07-23 22:53:55
回答 1查看 388关注 0票数 0

我有一个非常简单的设置。带有MongoDB数据库的Express-GraphQL API。MongoDB的响应通常相当快,但是当我想从TTFB返回时,GrapQL花费的时间太长了,特别是对于多用户查询。

例如,当我请求用户时,TTFB是25.65ms,内容下载大约是0.6ms。但是,当我请求所有具有相同字段的用户时,TTFB是4.32s,内容下载大约是1.28s。

内容下载没问题,但我觉得TTFB太长了。你可以用下面的RootQuery检查我的架构的一部分。

代码语言:javascript
复制
 const RootQuery = new GraphQLObjectType({
     name: 'RootQueryType',
     fields: {
         user: {
             type: UserType,
             args: {mail: {type: GraphQLString}},
             resolve(parent, args){
                 return User.findOne({mail: args.mail});
             }
         },
         users: {
             type: new GraphQLList(UserType),
             resolve(parent,args){
                 return User.find({}).collation({ locale: "en" }).sort({name: 1, surname: 1});
             }
         }
     }
 });

降低TTFB的最好方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-07-23 23:14:45

从您的代码片段中,我看不到UserType是如何定义的,我也不知道您正在执行的graphql查询到底是如何定义的。话虽如此,较高的TTFB数字通常表示服务器正在执行繁重的任务,因此,很可能您正在从查询中的UserType请求一个字段,该字段与一个昂贵的解析器相关联(可能执行另一个MongoDB查询),该解析器将在用户存在的情况下被执行多次。这就是所谓的N+1问题,您可以使用dataloder来解决这个问题,这将允许您在一个查询中批量处理那些代价高昂的MongoDB查询。

如果您可以提供有关UserType和正在执行的查询的更多信息,这将会有很大帮助。

参考资料:- https://itnext.io/what-is-the-n-1-problem-in-graphql-dd4921cb3c1a - https://github.com/graphql/dataloader

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57166906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档