
上QQ阅读APP看书,第一时间看更新
1.7.3 GraphQL是否会带来后端性能问题
GraphQL如此强大的查询让很多后端程序员为GraphQL的性能担心,可真的有问题吗?其实无论是不是使用GraphQL,任何不当的系统设计,尤其是在高并发的情况下,都有可能暴露出性能的问题。下面结合GraphQL的后端实现的具体问题来和各位读者分别讨论。
首先,也是绝大多数后端程序员担心的,GraphQL会不会额外产生过多数据库的查询?这个担心是有道理的,如果给查询里的每一个字段都独立地去数据库查询,那当然会产生非常多的查询,而且很多查询是重复的。
不过,目前已有的GraphQL后端实现(包括JavaScript、Go、Java和Scala)提供了非常灵活的自定义优化方式。比如可以结合使用Cache和Context对象来减少数据库查询次数,还可以使用DataLoader来合并查询,具体如何做在接下来的章节中结合具体的框架再进行阐述。而且大家可以想象一下,Facebook这样的访问量和用户界面复杂程度都可以,为什么我们不行?问题都是可以优化和解决的。
其次,GraphQL是很轻、很薄的一层,其后端的实现逻辑并不比REST架构复杂多少,也就是说它自己额外产生的延迟(Overhead)是很低的。