Kaz*_*Kaz 6 laravel graphql graphql-php
我想测试 GraphQL 端点和 RESTful 端点的响应时间,因为我以前从未使用过 GraphQL,我将在我的下一个 Laravel 项目中使用它。
所以我使用Lighthouse PHP 包从我的 Laravel 应用程序中为 GraphQL 端点提供服务,并且我还创建了一个 RESTful 端点。
两个端点(GraphQL 和 RESTful)都旨在从我的本地数据库中获取所有用户(250 个用户)。
因此,基于我在这里注意到的测试,当我在 上测试这两个端点时Postman,RESTful 端点响应比 GraphQL 端点快。
我可以知道为什么 GraphQL 端点的响应比 RESTful 花费更多时间,而两个端点都获得相同的数据吗?
GET 请求的 GraphQL 端点结果(响应时间:88 毫秒)

天下没有免费的午餐。
GraphQL 提供了许多有用的功能,但这些相同的功能总是会产生一些开销。虽然 REST 端点可以有效地从某个来源提取数据并将其反刍回客户端,但即使对于相对较小的数据集,GraphQL 也必须进行一些额外的处理来解析和验证响应中的每个单独字段。更不用说解析和验证请求本身所需的处理了。而且这种开销只会随着返回数据的大小而变大。
如果您要向 REST 端点引入其他功能(请求和响应验证、支持部分响应、为单个响应字段设置别名的能力等),这些功能镜像了 GraphQL,您将看到两者之间的性能差距缩小。尽管如此,它仍然有点像苹果和橘子的比较,因为 GraphQL 服务会经历某些动作,因为这正是规范所说的。
TLDR:您的 REST 示例简单且不那么复杂
在 Lighthouse 中,它正在创建一个AST来解析 graphql 请求和您的模式。然后它通过所有指令等等来弄清楚你想要做什么。它还必须验证您的查询,以查看您是否可以在架构上实际运行它。
根据您在应用程序中定义它的方式,它会经历很多步骤。然而,这可以通过多种不同的方式来减少,可以缓存你的 graphql模式的解析,你可以缓存结果,使用延迟字段(可能不会加速这个例子)。您可以在文档的性能部分阅读更多相关信息。
如果您使用某种 REST 标准,它也必须解析数据,则您没有指定 REST 的设置方式。如果添加更多功能,则需要运行更多代码,从而提高加载速度。
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |