What is Over-Fetching or Under-fetching?

时间:2017-06-15 10:17:14

标签: graphql fetching-strategy

I've been playing sometimes with graphQL. Before graphQL, we normally use REST API. Many developers said that graphQL fixes some problems of the REST. (e.g. over-fetching & under-fetching). I confuses with this terms.

Can somebody explain what is over and under fetching in this context?

Thanks,

3 个答案:

答案 0 :(得分:27)

过度获取会获取太多数据,也就是说您没有使用的响应数据。

欠读取没有足够的数据来调用端点,导致您调用第二个端点。

在这两种情况下,它们都是性能问题:您要么使用比您应该使用的带宽更多的带宽,要么就是在做更多的HTTP请求。

在完美的世界中,这些问题永远不会出现;您将拥有完全正确的端点,以便为您的产品提供正确的数据。

当您对产品进行扩展和迭代时,通常会出现这些问题。 您在页面上使用的数据经常会发生变化,维护单独端点以及每个组件的正确数据的成本会变得太高。

因此,您最终会在没有太多端点和端点满足最佳需求之间达成妥协。在某些情况下,这将导致过度获取(端点将为您的特定组件提供更多数据),而在其他情况下则提取不足(您需要调用第二个端点)。

因此,GraphQL修复了这个问题,因为它允许访问服务器公开的任意数据集。您专门指定了您需要的内容,并且只需一次访问服务器即可获取此数据,并且只能获取此数据。

答案 1 :(得分:1)

过度获取意味着您正在获取此时不可用的无关变量。 正在获取下意味着您正在获取的当前所需变量更少

答案 2 :(得分:0)

获取过多和获取不足 在像Ruby这样的动态语言中,过度获取和不足获取是两个常见的陷阱。

超量获取 当在片段中声明了其他字段但未在模板中实际使用其他字段时,发生超取。修改模板代码以删除某些字段的使用时,可能会发生这种情况。

如果片段未随此更改而更新,则在不再需要该属性时仍会获取该属性。一个简单的标题字段实际上可能没什么大不了的,但是此属性可能是更昂贵的嵌套数据树。

获取不足 当字段未在片段中声明但在模板中使用时,会发生读取不足。这些丢失的数据很可能会显示为NoFieldError或nil值。

更糟糕的是,当模板未声明数据依赖性但由于其调用者恰巧在上游提取正确的数据而似乎在起作用时,可能存在潜在的提取不足错误。但是,当从不同的路径呈现同一模板时,则会因丢失数据而出错。