【问题标题】:Cuncurrency handling in express jsexpress js中的并发处理
【发布时间】:2021-12-22 22:34:21
【问题描述】:

由于一些问题,例如 SSR、SSG 和 CSR 并列,我决定使用 express js 为 React js 创建自己的 SSR,我正在使用 redux 和 saga,并且我有几个 API 调用来生成渲染之前的数据。 所以我不得不在我的服务器端渲染器中使用几个 Promise,比如等待 redux 完成所有 API,或者等待样式和脚本,我也在使用 react-ssr-prepass 并且它浏览我的所有组件(对于调度 SSR 中所需的操作)。 所以我的项目中有很多线程阻塞的东西。

为了处理并发,我开始使用node-cluster,所以我的服务器上有几个节点,它会增加并发能力,但这不是最好的解决方案,因为在重负载下,即使节点集群也不会能够响应所有请求。

所以我开始考虑 node js 中的工作线程或子进程,所以我在每个请求上创建一个服务器端渲染器的实例并在后台执行所有操作,因此并发请求不会等待彼此完成。

但问题在于子进程或工作线程我不能使用“导入”,因为它是 es6

所以我有两个问题

首先,有没有办法在子进程中使用es6? (我试过 babel-esm-plugin 但它不支持 webpack 5)

其次,有没有比使用子进程的工作线程来增加并发能力更好的办法?

【问题讨论】:

    标签: node.js reactjs express ecmascript-6 server-side-rendering


    【解决方案1】:

    所以我找到了第一个挑战的解决方案,而不是直接使用子进程运行我的渲染器,我必须先构建它,所以我使用 webpack 生成它的 cjs 输出,然后在子进程中使用该输出过程。

    为了提高性能,我使用了 SSR 和 SSG 的组合,所以在每个请求中,我检查服务器上是否存在映射到路由的文件,如果不存在,我将使用 SSR 渲染器输出以创建一个文件,并将响应提供给用户,然后对于下一个请求,因为缓存文件存在,我使用该缓存文件而不是再次呈现结果。 最后我在服务器上设置了一个玉米作业,每10分钟清除一次缓存

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 1970-01-01
      • 2019-11-10
      • 2015-09-20
      • 1970-01-01
      • 2012-05-24
      • 2018-09-25
      • 2014-02-04
      • 2015-05-12
      相关资源
      最近更新 更多