Grafast 终于来了——一个全新的 GraphQL 全面执行引擎。它通过利用 GraphQL 的声明性特性,让你的业务逻辑更好地理解它需要做的一切,从而在整个后端堆栈中实现更高的效率。它向后兼容,因此你可以在现有的模式中逐步采用它,并且它终于可以与 npm 上的 grafast
模块 一起尝试了;或者查看 GitHub 上的源代码!
Grafast 工作组
在 Grafast 成为可以在任何语言中实现的规范之前,仍然需要做出一些决定并进行一些调整。如果您对这项技术的潜力感兴趣,请加入 Grafast 工作组并参与其中。我们都应该拥有轻松执行 GraphQL 的未来!
如果您没有时间观看上面的视频,这里有一些关于 Grafast 的信息。
“GraphQL 的执行模型不适合大多数服务器”
GraphQL 是一种声明式语言;请求预先指定了客户端请求的所有内容。
但是基于解析器的执行模型模糊了这种知识——当以简单的方式实现时,解析器很快就会导致严重的性能问题;即使实现得很好,它们也还有很多不足之处。
DataLoader 是解决“N+1 问题”的建议方法之一,但这仅仅是 GraphQL 模式可能面临的最严重的性能问题——随着您的模式和操作变得更加复杂,还有许多相关问题会累积起来。
我不仅要解决众所周知的 N+1 问题以及更微妙的欠取和过取问题,还要帮助您实现 GraphQL 模式的最高效执行,无论您使用什么数据源!解决方案?通过新的通用查询计划器利用 GraphQL 的声明性。
“解析器让路!有一种新的方法来执行 GraphQL”
Grafast 通过“计划解析器”来确定 GraphQL 请求中每个字段的需求,最终形成一个草案“操作计划”。一旦草案完成,计划就会被优化并执行。
Grafast 从一开始就被设计为为模式设计者提供必要的工具,以确保他们的模式尽可能高效地执行,同时确保编写他们的逻辑仍然是一种愉快的体验。为了实现这一点,Grafast 采用了一种规划策略,该策略对理解传入操作采取整体方法,并释放了重大优化的潜力:这些优化在基于解析器的执行模型中是无法实现的,除非付出巨大的努力(以及一些魔法 😉)。
Grafast 与 GraphQL 一样,不特定于任何特定的技术栈、业务逻辑形状或数据存储层。它不关心您是否使用关系数据库、文档存储、ORM、HTTP API、文件系统或信鸽。任何有效的 GraphQL 模式都可以用 Grafast 实现,Grafast 模式可以查询任何数据源、业务逻辑或服务。
虽然 Grafast 支持传统的解析器,但它鼓励开发人员使用“计划解析器”:类似于解析器的小函数,但它们描述了所需的数据,而不是实际获取数据。
计划解析器类似于传统的解析器,它们甚至遵循相同的形状,但关键区别在于它们描述了如何获取数据,而不是实际自己获取数据。
Grafast 获取 GraphQL 请求,并使用计划解析器草拟一个执行计划,该计划可以被优化和简化。优化可能涉及将执行形状从 GraphQL 请求所暗示的形状显著改变,使系统能够以最有效的方式满足请求的要求。
当规划阶段完成时,Grafast 将执行这个高度优化的执行计划,并将结果馈送到输出计划中,该计划有效地准备结果以发送到 GraphQL 客户端。
如果另一个请求使用相同的 GraphQL 文档但不同的变量进来,Grafast 可以重用该计划并直接跳到高度优化的执行阶段。
对 GraphQL 请求需求的更深入理解为优化打开了全新的途径,而不会牺牲诸如缓存之类的久经考验的方法。结果是更高的效率——不仅在您的 GraphQL 服务器中,而且在它所依赖的后端服务中——让您的团队在更长的时间内使用更简单的架构进行操作,让您的工程师专注于为您的客户提供更好的体验,而不是专注于保持复杂架构平稳运行的复杂性。
可能值得研究一下 @Benjie 在 Grafast 上所做的工作。感觉像是 GraphQL 世界中缺失的基底。
— Sean Grove (@sgrove) 2023 年 8 月 29 日
Grafast 已经可以正常工作,我的一些 赞助商 已经在生产环境中使用它。您可以通过访问 grafast.org 上的指南立即尝试。现在我要说的就是,如果这项新技术的潜力让你感兴趣,那么请