为什么 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 是:
- 并行 I/O 绑定任务,因为它由
libuv
处理
- CPU 绑定任务的并发
这解释了为什么 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。
为什么这个问题?
我正在学习有关 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 是:
- 并行 I/O 绑定任务,因为它由
libuv
处理
- CPU 绑定任务的并发
这解释了为什么 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。