npm 包 graphql-batching-helpers 使用教程

阅读时长 8 分钟读完

随着 GraphQL 在前端应用中的广泛使用,越来越多的开发者开始使用 GraphQL 服务来获取数据。同时,为了优化性能,GraphQL 服务通常会提供 batch 查询,即将多个查询合并为单个请求并返回结果。

然而,与此同时,处理 batch 查询也变得更加复杂,需要使用更多的代码来处理请求和响应。若你使用 Node.js 开发 GraphQL 服务端,那么 npm 包 graphql-batching-helpers 可以为你提供一组方便的工具函数来处理 batch 查询。在本篇文章中,我们将详细介绍这个 npm 包的使用方法。

安装

你可以在你的项目目录中使用以下命令来安装 graphql-batching-helpers

然后在你的服务端代码中引入模块:

用法

createBatchResolver

createBatchResolver 函数可以将查询的多个 fieldName 合并为单个请求:

-- -------------------- ---- -------
----- - ------------------- - - ------------------------------------

----- --------------- - ------------------------- ------ ----- -------- ----- -- -
  ----- ---- - ----- ---------------------- -- --------
  ------ ------------ -- -----------
---

----- ------ - --- ---------------
  ------ --- -------------------
    ----- --------
    ------- -
      ------- -
        ----- --- -----------------------
        ----- - ---- - ----- --- ---------------------- - --
        -------- ------------------------ - ------- ----- --------- ----- --
          ----- ----- ----- -------- ----- -- -
            -- --- ----- ---------
            ----- ------ - ----- -----------------------
            ------ -------
          --
      --
    --
  ---
---

参数:

  • batchLoadFn:一个异步函数,负责将查询信息加载到批处理结果中
  • options:一个包含以下属性的对象:
    • keyArg:一个字符串,指定用于查找结果的输入参数名称
    • batchArg:一个字符串,指定批处理加载的数组输入参数名称
    • keyFn:一个该字段的输入参数转换函数,将查询的输入参数映射到它们在返回值中的位置。如果未提供,则默认情况下期望 key 值与输入参数名称相同。
    • batchFn:一个对输入参数的筛选器函数,限制查找多个请求数据(默认情况下返回数组中所有内容)。函数接受批组的查询参数和整个请求参数
  • resolver:单个 fieldName 的标准返回值,具有参数和上下文。

createBatchLoadFn

createBatchLoadFn 函数可以将查询的多个 fieldName 合并为单个请求:

-- -------------------- ---- -------
----- - ----------------- - - ------------------------------------

----- ------------- - ----------------------- ------ ----- -------- ----- -- -
  ----- ---- - ----- ----------------------
  ------ ------------ -- -----------
---

----- ------ - --- ---------------
  ------ --- -------------------
    ----- --------
    ------- -
      ------ -
        ----- ----------
        ----- - --- - ----- --------- - --
        -------- -------------------- ---- ----- -------- ----- -- -
          -- --- ----- ---------
          ----- ----- - ----- ---------------------
          ------ ------
        ---
      --
      ----- -
        ----- ---------
        ----- - --- - ----- --------- - --
        -------- ---------------------------------- ----- ----- ----- -------- ----- -- -
          -- --- ---- ---------
          ----- ----- - ----- ----------------------
          ------ ------
        ---
      --
    --
  ---
---

参数:

  • batchLoadFn:一个用于将 query 中的信息加载到批处理结果中的异步函数
  • options:在没有使用 createBatchResolver 的情况下遵循
    • keyArg:一个字符串,指定用于查找结果的输入参数名称
    • keyFn:一个该字段的输入参数转换函数,将查询的输入参数映射到它们在返回值中的位置

示例

以下示例代码展示了如何使用 graphql-batching-helpers 解析一个用户的帖子和评论。用户需要首先解析所有帖子,然后解析所有评论:

-- -------------------- ---- -------
----- - -------------------- ----------------- - - ------------------------------------

----- --------------- - ----------------------- ------ -- -
  -- --------------
  -- ---------------
  ----- ----- - ----- -----------------------
  ------ ------------------ ----- -- -
    ------------ - -----
    ------ ----
  -- ----
---

----- ------------------ - ----------------------- ------ -- -
  -- ---------
  -- ---------------
  ----- -------- - ----- --------------------------
  ------ --------------------- -------- -- -
    --------------- - --------
    ------ ----
  -- ----
---

----- ----------------- - ---------------------
  ------ -----
  --------- ------
-- ----- ------ ----- -------- ----- -- -
  -- ------------
  ----- ----- - ----- ------------------------------ -- -- ----- ------- --- -----
  ----- -------- - ----- --------------------------------- -- -- ----- ---------- --- -----

  ------ ------------ -- --
    --------------
    --------- --------------
  ----
---

----- ------ - --- ---------------
  ------ --- -------------------
    ----- --------
    ------- -
      ----- -
        ----- ---------
        ----- - --- - ----- --------- - --
        -------- ------------------
      --
    --
  ---
---

在这个示例中, 通过前端传来的用户 id,我们首先通过 userBatchResolver 将用户的帖子和评论合并成单个请求,然后异步地加载帖子和评论(分别使用 postBatchResolver()commentBatchResolver()),最后将帖子和评论组装成 UserType 的返回值。

总结

使用 graphql-batching-helpers,可以轻松优化 GraphQL 查询性能。本文我们介绍了这个 npm 包的两个函数 createBatchResolvercreateBatchLoadFn,并提供了详细的使用教程和示例代码。希望这篇文章能让你更好地理解这个工具,并在实践中提高 GraphQL 的性能!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005601581e8991b448de2ca

纠错
反馈