为什么 React 的 renderToString 方法不使用集群?

Why React `renderToString` method doesn’t use clusters?

为什么这个问题?

我正在学习有关 js 性能和网页渲染的知识。 This post 很有用。

如果您点击一些链接,您将登陆 here 并阅读:

User code in Node.js runs in a single thread, so for compute operations (as opposed to I/O), you can execute them concurrently, but not in parallel.

所以我已经阅读了有关 nodeJS 中并发性和并行性的内容。我了解到的是 nodeJS 是:

这解释了为什么 renderToString 是一个缓慢的操作,因为它是 CPU 绑定的。但似乎有一种方法可以在 nodejs 中启用 CPU 绑定任务的并行性:clustering.

问题

这就是我来这里的原因。你知道为什么 renderToString 没有聚类吗(不知道这是不是有效的英文)?

我想明白为什么。因为在这些阅读之后,我倾向于认为 nodeJS 在处理 I/O 时性能非常好,但它似乎也可以处理 CPU 绑定任务,因为您可以创建集群。尽管如此,它似乎并不是微不足道的,在某些特定情况下是一个需要考虑的选择。

所以这引出了一个额外的问题:nodejs 的集群 limitations/drawbacks 是什么? (除了在大型项目上安装和维护似乎很复杂?)

将抽象放在这个级别是没有意义的。

不难运行一个renderToString()作为一个簇。例如,您可以轻松使用 worker-farm 库。

问题是这变得很难以有益的方式使用,因为为每个传入请求构建的数据 "store" 必须在 renderToString() 处理的整个组件树的范围内。

也许尽管使用实验性 worker threads node.js 库,我们可能会得到一些多线程 renderToString。但是,React在SSR(Server Side Rendering)方面的工作却没有客户端那么活跃

也许通过允许 React 暂停树的渲染并启动它的工作,我们最终将有一个线程可以在主线程处理传入的数据时继续渲染 request/action。