我有一个运行良好的React Redux服务器渲染应用程序。
当我进入不同的页面时,我测量了一些服务器响应时间:
在我的 / singin 页面上,我得到了60分钟的响应。好。
在我的 / user 页面上(需要身份验证)我在300毫秒内得到了响应。因为服务器必须通过要求API知道用户是否有权访问此页面来预取当前用户会话和当前用户
在我的 / user / graph 页面上。我得到了600毫秒的响应。因为服务器必须通过询问API来预取当前用户会话,当前用户和图表数据。
主要问题是我无法并行化所有这些请求。
这是服务器流程:
以下是我的问题:
答案 0 :(得分:0)
这是服务器流程:
- 接收
的页面请求/user/graph
- 并行获取
/api/user/session
和/api/user/me
- 与React-Router匹配的路由(需要知道用户是否经过身份验证才能重定向)
- 此时,服务器知道将要呈现的组件。对他们来说,它并行获取所需的数据。这意味着抓取
/api/graph
,/api/graphConstants1
,/api/graphConstants2
等等。- 反复渲染
这看起来很完美,这就是基于Microservices的架构应该如何运作。
正如您所说,大多数API调用是在并行中进行的,因此不必担心连续API调用之间的延迟。
主要问题是我无法并行化所有这些请求。
但是,您可以要求API团队为所需的微服务提供一个伞形API。在这种情况下,API团队需要并行或mutithreads处理处理。
并行获取
/api/user/session
和/api/user/me
看起来,您正在调用/api/user/session
来验证用户session
。但是,您不应该将caching
用于/api/user/me
。
我猜/api/user/me
这是GET
请求,这是一种减少此类调用的方法。如果登录成功并缓存数据,则此API发送的data
可以轻松地通过signin
API发送。
在对用户数据进行任何更新时,即在任何POST
,PUT
,DELETE
调用上,可以清除现有的缓存数据,并且API可以返回最新状态将用于预热缓存的用户。
PS:这种决定可以/不得在StackOverflow答案上做出,但需要在API提供者和消费者之间进行深入讨论和协议。