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