【问题标题】:What is Over-Fetching or Under-fetching?什么是过度获取或不足获取?
【发布时间】:2017-11-17 19:03:43
【问题描述】:

我有时会玩 graphQL。在 graphQL 之前,我们通常使用 REST API。许多开发人员表示,graphQL 修复了 REST 的一些问题。 (例如,过度获取和获取不足)。我对这些术语感到困惑。

有人能解释一下在这种情况下什么是过度和不足吗?

谢谢,

【问题讨论】:

    标签: graphql fetching-strategy


    【解决方案1】:

    过度获取是获取太多数据,这意味着响应中有您不使用的数据。

    在调用端点时未获取足够的数据,迫使您调用第二个端点。

    在这两种情况下,它们都是性能问题:您使用的带宽比理想的多,或者您发出的 HTTP 请求比理想的多。

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

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

    因此,您最终会在没有太多端点和让端点最适合每个组件需求之间做出折衷。这将导致在某些情况下过度获取(端点将提供比一个特定组件所需的数据更多的数据),而在其他情况下会导致获取不足(您需要调用第二个端点)。


    GraphQL 解决了这个问题,因为它允许你从服务器请求你想要的数据。您指定您需要什么,并且将在一次访问服务器时获取此数据,并且仅此数据。

    【讨论】:

    • 很好的解释:)
    • 很好的解释
    【解决方案2】:

    过度获取意味着您正在获取此时无用的无关变量。 Under fetching 表示您现在获取的变量较少

    【讨论】:

      【解决方案3】:

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

      过度获取 当在片段中声明了附加字段但实际上并未在模板中使用时,就会发生过度获取。当修改模板代码以删除某个字段的使用时,可能会发生这种情况。

      如果片段没有随着这个变化而更新,当我们不再需要它时,仍然会获取该属性。一个简单的标题字段在实践中可能没什么大不了,但这个属性可能是一个更昂贵的嵌套数据树。

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

      更糟糕的是,当模板未声明数据依赖项但似乎正在工作时,可能会出现潜在的提取不足错误,因为它的调用者恰好在上游获取正确的数据。但是,当从不同的路径呈现相同的模板时,它会在丢失数据时出错。

      【讨论】:

      • 这个问题是关于 graphQL 和 REST,而不是 Ruby。
      • 不错的尝试!
      猜你喜欢
      • 2013-03-08
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多