express js中的并发处理
Cuncurrency handling in express js
因为一些问题,比如SSR、SSG和CSR彼此并排,我决定用express js为React js创建我自己的SSR,我使用的是redux和saga,我有几个API 调用在渲染数据之前生成数据。
所以我不得不在我的服务器端渲染器中使用几个承诺,比如等待 redux 完成所有 APIs,或者等待样式和脚本,我也在使用 react-ssr-prepass 并通过它导航我的所有组件(用于调度 SSR 中所需的操作)。
所以我的项目中有很多线程阻塞的东西。
为了处理并发我开始使用节点集群,所以我的服务器上有几个节点,它会增加并发能力,但这不是最好的解决方案,因为在重负载下,即使节点集群也赢了'能够响应所有请求。
所以我开始考虑节点 js 中的工作线程或子进程,所以我在每个请求上创建一个服务器端渲染器的实例,并在后台执行所有操作,因此并发请求不会互相等待待完成。
但问题出在子进程或工作线程中我不能使用“导入”,因为它是 es6
所以我有两个问题
首先,请问有没有办法在子进程中使用es6? (我试过 babel-esm-plugin 但它不支持 webpack 5)
其次,有没有比使用子进程的工作线程来提高并发能力更好的办法?
所以我找到了第一个挑战的解决方案,而不是 运行 我的渲染器直接与子进程一起构建,我必须先构建它,所以我使用 webpack 制作它的 cjs 输出,然后在子进程中使用该输出。
为了提高性能,甚至更多,我使用了 SSR 和 SSG 的组合,所以在每个请求中我检查服务器上是否存在映射到路由的文件,如果不存在,我将使用SSR 渲染器输出创建一个文件,并为用户提供响应,然后对于下一个请求,因为缓存文件存在,我使用该缓存文件而不是再次渲染结果。
最后我在服务器上设置了一个玉米作业,每 10 分钟清除一次缓存
因为一些问题,比如SSR、SSG和CSR彼此并排,我决定用express js为React js创建我自己的SSR,我使用的是redux和saga,我有几个API 调用在渲染数据之前生成数据。 所以我不得不在我的服务器端渲染器中使用几个承诺,比如等待 redux 完成所有 APIs,或者等待样式和脚本,我也在使用 react-ssr-prepass 并通过它导航我的所有组件(用于调度 SSR 中所需的操作)。 所以我的项目中有很多线程阻塞的东西。
为了处理并发我开始使用节点集群,所以我的服务器上有几个节点,它会增加并发能力,但这不是最好的解决方案,因为在重负载下,即使节点集群也赢了'能够响应所有请求。
所以我开始考虑节点 js 中的工作线程或子进程,所以我在每个请求上创建一个服务器端渲染器的实例,并在后台执行所有操作,因此并发请求不会互相等待待完成。
但问题出在子进程或工作线程中我不能使用“导入”,因为它是 es6
所以我有两个问题
首先,请问有没有办法在子进程中使用es6? (我试过 babel-esm-plugin 但它不支持 webpack 5)
其次,有没有比使用子进程的工作线程来提高并发能力更好的办法?
所以我找到了第一个挑战的解决方案,而不是 运行 我的渲染器直接与子进程一起构建,我必须先构建它,所以我使用 webpack 制作它的 cjs 输出,然后在子进程中使用该输出。
为了提高性能,甚至更多,我使用了 SSR 和 SSG 的组合,所以在每个请求中我检查服务器上是否存在映射到路由的文件,如果不存在,我将使用SSR 渲染器输出创建一个文件,并为用户提供响应,然后对于下一个请求,因为缓存文件存在,我使用该缓存文件而不是再次渲染结果。 最后我在服务器上设置了一个玉米作业,每 10 分钟清除一次缓存