同时使用多个ReactDOM.render
函数对性能可能有多大影响?例如,直到30+ ReactDOM.render
调用。
我知道这听起来可能很奇怪。我目前正在开发一个使用单个ReactDOM.render
功能的大型web项目。我们提出的最大问题之一是更新到Reactive18,因为这个项目很大,包含了很多遗留代码,所以有很多地方可以使用最新的React版本不支持的遗留方法。我想在多个独立的子应用程序(即.a)上拆分一个SPA。(微前端),但仍然使用单一部署构建,具有内存缓存,可以在应用程序之间共享,为用户保持SPA体验等。然而,同时也具有在较新版本的React上逐步迁移的能力。
通过重构两个子应用程序,我们已经成功地创建了一个概念的工作证明。目前,每个应用程序的启动看起来都是这样的:
// Subscribe on URL path change.
observer.on('changed', () => {
if (window.location.path.includes(targetPath)) {
ReactDOM.render(<App />, elementContainer);
} else {
ReactDOM.unmountComponentAtNode(elementContainer);
}
});
正如你所看到的,除非我们进入特定的路线,否则我们不会立即作出反应。但理想情况下,我更希望应用程序的入口点是这样的:
const AppEntryPoint = () => {
<Switch>
<Route path="...">
<App />
</Route>
<Route>{null}</Route>
</Switch>
};
ReactDOM.render(<AppEntryPoint />, elementContainer);
问题是:在像这样的30+入口点的启动阶段,情况会有多糟?还有其他我没有注意到的严重问题吗?
发布于 2022-09-16 21:02:20
实际上,我也做过类似的工作,升级了一个遗留应用程序,而且还不错。我认为累积渲染时间与在一棵树中的渲染时间非常相似。
然而,我认为你在做这件事之前应该仔细考虑。新闻稿上写着:
虽然更改通常很小,但您仍然有能力按自己的速度进行更改。React 18中的新呈现行为仅在应用程序中使用新功能的部分中启用。
老实说,它可能是由状态更新批处理导致的少数损坏组件。您的方法不一定是不正确的,取决于情况有多糟;但是,只有当情况非常极端时,您才应该这样做。这将付出巨大的代价,而且也很难逆转。也许少数常见的组件有问题?
您只需将所有状态更新包装在一个刷新中,然后向后工作以删除它们:https://blog.devgenius.io/understanding-automatic-batching-in-react-18-fb5b8fdf062d
我通常会鼓励像您这样的增量方法,但是您应该仔细考虑增量和大爆炸的成本,因为相对于结束状态,增量方法的拟议更改会有多大。
我还将添加,如果您这样做,可能最好添加占位符HTML元素到页面-然后查询这些和加载反应树。耦合到URL将使代码更难移动。这在过去对我起过作用。
https://stackoverflow.com/questions/73752174
复制相似问题