我知道 GraphQL 在处理大型数据集时会变慢,但我拥有的是大约 60 个项目的数组。例如。在一个简单的查询中,我获取
id
、title
和 country
,Apollo 服务器平均需要超过 3 毫秒返回数据,而解析器在不到 200 毫秒内重新运行调用 REST 端点的数据。我使用 Apollo studio 来调试查询,但我得到的结果对我没有任何帮助 - 到处都少于 1 毫秒。
如果我使用 2 个嵌套查询进行更复杂的查询,则相同的 60 个项目需要 15-20 秒,并且嵌套查询非常轻。
我用谷歌搜索,发现人们面临类似的问题,对数千个项目进行大量查询,他们只讨论几秒钟,而不是 15-20 秒。
感觉我的设置有问题。我没有收到任何错误。 我正在使用
apollo-server-express
进行基本设置:
const server = new ApolloServer({
typeDefs,
resolvers,
introspection: true,
playground: !(process.env.NODE_ENV === 'production'),
engine: {
reportSchema: true,
graphVariant: 'current',
},
subscriptions: {
onConnect: () => winston.info('Connected to websocket'),
onDisconnect: webSocket => winston.info(`Disconnected from websocket ${webSocket}`),
},
context: ({ req }) => ({
//eslint-disable-line
req,
pubSub,
}),
});
我意识到这是一个迟到的答复,但我们最近面临着同样的情况。
我们最近从 Apollo 服务器 2.x 迁移到 4.x,我们对 Apollo 4 的速度有多慢感到惊讶。 如果一次查询成功,则需要 60 多秒。大多数查询只是在长时间等待后超时。
经过漫长而乏味的修补,我们终于确定问题与服务器上启用的内省有关。 这导致 Apollo 工作室在 Apollo 尝试满足请求时不断拉取模式。 在我们的例子中,Apollo 工作室试图每 5 秒刷新一次模式——至少可以说这是一种矫枉过正的行为。