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 上的指南来试用它。现在我要说的是,如果这项新技术的潜力让你感兴趣,那么请