node.js - 为什么React `renderToString`方法不使用集群?

标签 node.js reactjs performance cluster-computing

为什么问这个问题?

我正在学习有关 js 性能和 Web 渲染的知识。 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 是:

  • 并行 I/O 绑定(bind)任务,因为它由 libuv 处理
  • CPU 密集型任务的并发

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

问题

这就是我来这里的原因。你知道为什么renderToString不是集群的吗(不知道这是否是有效的英语)?

  • 也许太复杂了?
  • 也许它无法并行完成?
  • 也许由于某种原因它无法提高性能?

我想了解为什么。因为在阅读完这些内容之后,我倾向于认为 NodeJS 在处理 I/O 方面非常高效,但它似乎对于 CPU 密集型任务也很高效,因为您可以创建集群。尽管如此,这似乎并不是微不足道的,并且是在某些特定情况下需要考虑的选择。

因此,这给我们带来了一个额外的问题:nodejs 集群的限制/缺点是什么? (除了大型项目的设置和维护似乎很复杂之外?)

最佳答案

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

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

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

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

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

关于node.js - 为什么React `renderToString`方法不使用集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874179/

相关文章:

java - 创建另一个线程

java - 垃圾收集器占用太多 CPU 时间

javascript - 为什么我的查询在 pgAdming 上运行,但是当我从服务器执行它时,出现查询错误(错误 : Connection Terminated)?

javascript - 如何返回目录中的文件? (JavaScript、Node.js)

node.js - 管理不同环境的 yarn 安装的最佳实践

reactjs - useReducer hook,如何对 Action 进行类型检查?

javascript - useLocation 状态即将为 null

javascript - Pyodide 无法将 xlsx 文件读入 pandas

reactjs - React Native - 为 ios 或 android 做一个搜索栏

r - 提高大型矩阵中加权 Jaccard 计算的性能