【发布时间】:2021-12-31 10:30:32
【问题描述】:
我正在开发一个遗留的 react-app,因此很多部分无法推理,只能接受。
所以,我有几个组件加载了很多依赖项,显然对于第一次渲染并不重要。因此,我尝试了以下方法:
const HeavyComp = lazy(() => import("HeavyComponent.jsx");
function Home() {
return <div>
<HeavyComp />
</div>
}
因此,HeavyComponent 作为主包的一部分加载,但仅在加载该组件后可见。这有助于缩短脚本编写时间,但 FCP 还很遥远。
所以,我尝试了以下方法:
function Home() {
const [ heavyComponent. setHeavyComponent ] = useState(null);
useEffect(() => {
setHeavyComponent(
lazy(() => import("HeavyComponent.jsx")
);
}, []);
return <div>
{
heavyComponent && <heavyComponent />
}
</div>
}
我认为这会有所帮助,但和以前一样,FCP 仍然延迟到 heavyComponent 被下载、解析和渲染。所以我唯一的选择是使用setTimeout 或更好的requestIdleCallback 使其异步。
这是最好的解决方案还是有更好的解决方案?
【问题讨论】:
-
什么是
FCP?你能先澄清一下吗? -
好的,你可能正在寻找一个叫做
Suspense的东西,寻找 react 并发编程,reactjs.org/docs/concurrent-mode-suspense.html -
这适用于不必立即渲染的组件。例如,
{ isTrue()? <div>True</div>: <Header /> }。在这种情况下,根本不下载 Header,仅在需要时才下载。
标签: javascript reactjs frontend web-performance