javascript React延迟加载-何时使用

kiz8lqtg  于 2023-03-28  发布在  Java
关注(0)|答案(3)|浏览(174)

我有一个相当大的应用程序,现在它的捆绑包大小约为2MB(3个块左右)。为了缩短加载时间,我决定开始使用相对较新的React Lazy
下面是一个惰性导入的例子:

const Wizard = React.lazy(() => import('./components/wizards/Wizard'));

我理解这个想法,但我仍然很难理解它的缺点,除了必须等待一段时间才能不时地加载一个块。
根据我所读到的,我没有理由使用常规导入。

我的问题是:我应该在我的应用中的每个组件导入上使用惰性导入吗?为什么?为什么不呢?

我很想听听你们的想法。

odopli94

odopli941#

不需要,对于每个组件都不需要。对于每个布局或页面都使用它是有意义的。一个很好的起点是路由。大多数网络用户都习惯于页面转换需要一些时间来加载。你也倾向于一次重新渲染整个页面,所以你的用户不太可能同时与页面上的其他元素进行交互。
例如,您创建新闻聚合器的应用程序。您的应用程序包括两个页面,如NewsListNewsItemPage。每个页面都包括几个不同的组件。在这个例子中,对每个其他页面使用延迟加载组件是有意义的。然后它将加载它需要的组件。
应用程序也有一个HeaderFooter。它们应该以通常的方式加载。因为它们在每个页面上都使用,并且异步加载没有意义。

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import React, { Suspense, lazy } from 'react';

import Header from './components/Header';
import Footer from './components/Footer';

const NewsList = lazy(() => import('./pages/NewsList'));
const NewsItemPage = lazy(() => import('./pages/NewsItemPage'));

const App = () => (
  <Router>
    <Header />
      <Suspense fallback={<div>Loading...</div>}>
        <Switch>
          <Route exact path="/" component={NewsList}/>
          <Route path="/news/:id" component={NewsItemPage}/>
        </Switch>
      </Suspense>
    <Footer />
  </Router>
);
1rhkuytd

1rhkuytd2#

我还没有开始使用它。但我认为最乐观的方法是在着陆页上需要的所有组件上进行定期导入。其他所有内容,如home以外的任何其他路由,都应该使用延迟加载。这是我猜的总体思路。

cl25kdpy

cl25kdpy3#

延迟加载是优化应用程序的基本技术。特别是在更大,更复杂的应用程序中,它可以帮助减少加载时间/下载数据,帮助SEO,只暴露用户需要的代码和组件,例如普通用户没有管理组件。巧妙地实现它可以帮助A/B测试或功能切换。
所以通常的答案是,这取决于你的用例。对于一个小型新闻阅读器应用程序,你可能看不到任何好处。

相关问题