服务器渲染:预取数据性能

时间:2016-03-17 23:17:08

标签: javascript ajax api reactjs redux

我有一个运行良好的React Redux服务器渲染应用程序。

当我进入不同的页面时,我测量了一些服务器响应时间:

  • 在我的 / singin 页面上,我得到了60分钟的响应。好。

  • 在我的 / user 页面上(需要身份验证)我在300毫秒内得到了响应。因为服务器必须通过要求API知道用户是否有权访问此页面来预取当前用户会话和当前用户

  • 在我的 / user / graph 页面上。我得到了600毫秒的响应。因为服务器必须通过询问API来预取当前用户会话,当前用户和图表数据。

主要问题是我无法并行化所有这些请求。

这是服务器流程:

  • 接收 / user / graph
  • 的页面请求
  • 并行获取 / api / user / session / api / user / me
  • 与React-Router匹配的路由(需要知道用户是否经过身份验证才能重定向)
  • 此时,服务器知道将要呈现的组件。对他们来说,它并行获取所需的数据。这意味着抓取 / api / graph / api / graphConstants1 / api / graphConstants2 等等。
  • 反复渲染

以下是我的问题:

  1. 最佳做法是什么?
  2. 如何通过预取请求减少初始渲染时间?
  3. 我应该只在客户端上做大请求(例如 / api / graph )吗?但是服务器渲染的目的是什么呢?
  4. 我是否应该让我的api团队为渲染服务器创建一个自定义超级方法,以便在一个请求中检索所有数据?

1 个答案:

答案 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发送。

在对用户数据进行任何更新时,即在任何POSTPUTDELETE调用上,可以清除现有的缓存数据,并且API可以返回最新状态将用于预热缓存的用户。

PS:这种决定可以/不得在StackOverflow答案上做出,但需要在API提供者和消费者之间进行深入讨论和协议。