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

时间:2019-02-25 20:29:49

标签: node.js reactjs performance cluster-computing

为什么要问这个问题?

我正在学习有关JS性能和Web渲染的知识。 This post非常有用。

如果您点击某些链接,将进入here并阅读:

  

Node.js中的用户代码在单个线程中运行,因此对于计算操作(与I / O相对),您可以同时执行它们,但不能并行执行。

因此,我已经阅读了有关nodeJS中的并发和并行性的知识。我了解到的是nodeJS是:

  • 与I / O绑定的任务并行执行,因为它由libuv处理
  • 与CPU绑定的任务并发

这说明了renderToString的运行速度很慢,因为它受CPU限制。但是似乎有一种方法可以在nodejs:clustering中启用与CPU绑定的任务的并行性。

问题

这就是为什么我在这里。您知道为什么renderToString没有聚类(不知道这是不是有效的英语)?

  • 也许太复杂了?
  • 也许只是不能并行完成?
  • 也许由于某些原因它不能提高性能?

我想了解原因。因为经过这些阅读之后,我倾向于认为nodeJS在处理I / O方面非常出色,但是由于可以创建集群,因此它似乎对CPU绑定任务也很有效。不过,这似乎并不简单,在某些特定情况下可以考虑。

因此,这引出了一个额外的问题:Node.js集群的局限性/缺点是什么? (除了在大型项目上设置和维护似乎很复杂之外?)

1 个答案:

答案 0 :(得分:-1)

将抽象置于此级别没有意义。

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

问题在于,这很难以一种有益的方式使用,因为为每个传入请求构建的数据的“存储”必须在renderToString()所作用的整个组件树的范围内。

也许通过实验性worker threads node.js库,我们可能会获得一些多线程renderToString。但是,React的SSR(服务器端渲染)工作并不像客户端那么活跃。