软件技术学习笔记

个人博客,记录软件技术与程序员的点点滴滴。

SSR超时回退到CSR

去年的时候,为了提升用户首屏显示时间,我们使用React SSR。但是,前段时间用户访问量比较大,发现用户导航之后首屏很久才出来。查看链路追踪,发现后端接口的响应时间远大于平常。

SSR的目的是为了让用户更快地看到内容,但是后端接口超时就白屏很久。为了解决这个问题,在SSR请求后端接口时,也启动一个超时Promise。如果超时先返回,立刻给用户返回CSR HTML模板,确保用户尽快能够看得界面。还没有数据的Loading界面,总比一直白屏好。

import { timeout } from 'promise-timeout';

const backendPromises = [
  // 请求后端接口与准备SSR数据
];

try {
  await timeout(Promise.all(backendPromises), 1000);
  return (<SSR />)
}
catch (e) {
  return (<CSR />);
}