Graphql和往返。 这只是一个iOS应用程序的问题?
我再看一下graphql,我试图理解为什么节省往返旅程对开发人员是有好处的。 请求的代价如此昂贵? 我来自网页开发背景。
让我们比较一个标准的rest api和一个graphql api。
我需要检索用户的个人信息和他们的朋友列表。 传统的restAPI可能需要2个电话,一个获取个人信息,一个获取朋友。
用graphql,我得到了一个请求相同的结果。
但是作为一个前端开发者,我希望我的页面有最短的停滞期。 我想尽可能快地渲染页面的一部分,而不是等待我所需要的所有信息,然后渲染页面。
现在从我的理解,graphql是部分创build解决移动应用程序API的问题。 有没有什么关于ios应用程序,使它更有利于一次加载所有的数据,而不是并行请求? 还是有什么我失踪?
所以一般来说,您所控制的系统(即您的后端)内部的networking通信速度很快。 向外界请求205ms(200msnetworking,5ms数据)的请求,内部可能只需要6ms(1msnetworking,5ms数据)。
如果你想build立你的应用程序的屏幕,这需要做出两个REST请求,因为第二个取决于第一个的结果,你看着(给定这些粗略的数字)410毫秒,以获得您需要呈现您的数据屏幕。
使用GraphQL(或其他合并数据的网关层),您可以将所有内容稍微超过212毫秒(对于每个内部调用,GraphQL服务器延迟200毫秒+ 6毫秒)。
在可以并行执行所有请求(即不依赖于其他请求的数据)的情况下,性能优势并不明显,但是您会发现这些情况实际上非常罕见你的应用程序的复杂性增长。
使用GraphQL的一般经验法则是,如果您的初始查询获取足够的数据以使页面可以正常工作,那么您可以随时使用另一个查询获取不太重要的内容。
除了性能方面的好处之外,让移动设备减lessnetworking请求在电池寿命方面是一个巨大的胜利。 networking使用是昂贵的,应该尽可能地避免。
在使用GraphQL代替REST API之前,需要了解GraphQL优于REST的好处
GraphQL是一种查询语言,它使用您定义的types系统GraphQLInt
, GraphQLString
, customType
…
rest
- 多次往返 – 慢
- 重载的数据
- 许多EndPoint
GraphQL
- 1端点
- 声明式:types,查询,突变
- 一次调用所需数据的确切形状
- 没有underfetching,没有overetch的数据
-
query == result
,性能更好