使用 GraphQL 的效率和速度之间的平衡

阅读时长 5 分钟读完

随着 Web 应用程序的复杂化,前端应用程序需要与 API 交互来获取和保存数据。传统的 REST API 通常繁琐且过于依赖后端的数据结构。而使用 GraphQL 可以为前端开发者提供更好的灵活性和控制权。然而,与传统 REST API 相比,使用 GraphQL 可能会牺牲一些性能。本文将详细探讨如何使用 GraphQL 平衡效率和速度,并提供一些使用 GraphQL 的指导。

GraphQL 简介

GraphQL 是一种用于 Web 应用程序的查询语言。它提供了一种灵活的方法来获取和保存数据,并且可以自定义在某个 GraphQL API 上可用的字段和操作。这使得开发者可以更细粒度地控制他们从 API 中获得或保存哪些数据。

GraphQL 由 Facebook 开发,于 2015 年正式发布。它很快成为了许多企业和开源项目中的首选数据层技术。尽管 GraphQL 始终比 REST 耗费更多的服务器资源,但前端团队可以从中受益。

如何平衡速度和效率

使用 GraphQL 可以在一定程度上牺牲性能,但是如果您谨慎地快速地浏览您的代码和操作,并优化您的查询和变更,请务必提高性能。

以下是一些最佳实践,可以帮助您平衡 GraphQL 的使用效率和速度:

创建可缓存查询

GraphQL 的一大强点是它的查询缓存机制。这意味着如果您的应用程序发出相同的查询,则 GraphQL 服务器不必再次解析和执行查询。这意味着您的应用程序可以在性能方面得到优化。

为了获取此代码摇树特性的全部好处,请确保查询具有稳定的唯一标识符。例如,确保仅在查询特定实体的所有属性时传递 ID,而不是传递 ID 和一些其他不确定的参数。这使得所有属性对应于唯一标识符,并且可以在许多查询中使用缓存,而不仅仅是针对特定查询。

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

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

减轻单一查询的重负

通过使用 fragment,可以将 GraphQL 查询拆分为多个部分。这有助于减轻单个查询的负担,并帮助最大程度地缓存代码片段。可以创建许多可重用的 fragment,并将其用于多个查询中。

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

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

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

视数据结构和查询复杂性而定

GraphQL 能够更好地处理多加嵌套的结构和查询,但也需要谨慎处理这些情况。较高层级的嵌套虽然具有更高的粒度控制,但会损失一些性能。因此,可以视查询的复杂性和数据结构情况而定,有些时候可以降低层级嵌套,提高性能。

例如,以下查询看起来很干净,但嵌套了许多级别。如果您的应用程序需要此类嵌套,则此查询已达到理想。

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

几种常见的 GraphQL 查询

在使用 GraphQL 时,有几种查询类型。在一些典型场景中,每种查询类型都有其自己的优势。

Query 查询

Query 查询是最普遍和基本的查询类型。它用于请求和获取数据。通常情况下,您会在 GraphQL schema 中定义一些字段,然后将它们用于 Query 查询,以便客户端可以调用它们来获取相应的数据。

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

Mutation 查询

Mutation 查询用于执行更改和保存查询。通过 Mutation 查询,您可以调用在过去的 REST API 中常常隐藏的创建、更新和删除操作。

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

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

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

Subscription 查询

Subscription 查询用于订阅和接收实时数据。利用贯通于全栈的 PubSub 常见来实现,从而允许前端获取实时数据的推送通知。

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

结论

在平衡效率与速度之间,GraphQL 可以为前端开发者提供更好的灵活性和控制权。

通过创建可缓存的查询、减轻单一查询的重负、视数据结构和查询复杂性而定,可以让 GraphQL 在提供高度定制性的同时,达到尽可能的性能优化。

选择恰当的查询类型,Query 查询、Mutation 查询或 Subscription 查询,有助于最大程度地发挥 GraphQL 的强大功能和优势。

最后,希望本文能够提供有价值的学习和指导,使得您可以更好地在前端开发中使用 GraphQL。

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

纠错
反馈