由于一些问题,比如将SSR、SSG和CSR放在一起,我决定使用express js为React js创建自己的SSR,我使用redux和saga,并且在呈现数据之前,我有几个API调用来生成数据。所以我不得不在我的服务器端渲染器中使用了几个promises,比如等待redux完成所有的API,或者等待样式和脚本,我还使用了react-ssr-prepass,它在我的所有组件中导航(用于分派SSR中需要的操作)。所以我的项目中有很多线程阻塞的东西。
为了处理并发,我开始使用node-cluster,所以我的服务器上将有几个节点,这将增加并发容量,但这不是最好的解决方案,因为在繁重的负载下,即使是节点集群也无法响应所有请求。
所以我开始考虑节点js中的工作线程或子进程,所以我在每个请求上创建了我的服务器端渲染器的一个实例,并在后台做所有的事情,所以并发请求不会等待彼此完成。
但问题出在我不能使用"import“的子进程或工作线程中,因为它是es6
所以我有两个问题
首先,有没有办法在子进程中使用es6?(我试过babel-esm-plugin,但它不支持webpack 5)
其次,有没有比使用子进程的工作线程更好的方法来增加并发容量?
发布于 2021-11-12 07:37:36
所以我为我的第一个挑战找到了解决方案,而不是直接用子进程运行我的渲染器,我必须首先构建它,所以我使用webpack来制作它的cjs输出,然后在子进程中使用该输出。
为了提高性能,我使用了SSR和SSG的组合,所以在每个请求中,我会检查服务器上是否存在映射到路由的文件,如果不存在,我将使用SSR渲染器输出创建一个文件,并将响应提供给用户,然后对于下一个请求,由于缓存的文件存在,我将使用该缓存文件而不是再次呈现结果。最后,我在服务器上设置了一个corn作业,每10分钟清除一次缓存
https://stackoverflow.com/questions/69911383
复制相似问题