掌握 react-window

在前端开发社区中,我们倾向于使用性能这个词,我们都有一个共同的目标,即拥有一个高性能的应用程序。

反应窗口背后的理论

反应窗口在理论上是非常简单的理解,窗口是指用户可以看到的视图。

Window View

反應窗口只會顯示使用者可以看到的東西,因為為什麼我們要使用資源顯示使用者看不到的區域?這將是純粹的愚蠢!

让我们务实

好吧,如果没有实际应用程序,将应用程序配置起来会很困难吗?我已经创建了一个应用程序,收集了大量的电影清单, 你可以在这里查看复制片

只需运行npm安装,然后npm启动,您现在应该在localhost:3000上看到以下内容

Our App

初步测量

movie-list.js中的以下代码将从我们的大响应中获得5000电影:

1const moviesList = movies.slice(0, 5000);

我们将使用5000作为我们的样本大小,因为它很小,需要一些时间来渲染。

我们将通过测量我们的初始性能开始,我们首先测量的是我们每秒的(‘FPS’)。

FPS Meter

我们的Frame Rate34.0fps,这是相当缓慢的,我们更希望实现60fps左右的东西。

Frame

接下来我们将测量的是我们的第一个有意义的油漆。为了做到这一点,我运行了一份灯塔报告,这不能处理5000电影,所以只是为了这个测试,我把电影的数量转移到500

Audit

正如你从上面可以看到的那样,表现并不好,请记住,这与500电影有关,而不是5000

应用 React-Window

我将对一个名为性能增强的新分支进行所有性能升级,这意味着当你克隆复制器时,你将对分支进行缓慢的应用,你可以切换两者之间看到差异。

要实现react-window,您需要先通过运行npm install react-window来安装它,然后导入FixedSizeList

1import { FixedSizeList as List } from 'react-window';

创建一个线

要使用列表组件,我们需要创建这样的原始组件:

 1// all props are passed by the List component
 2const Row = ({ index, style, data }) => {
 3  const movie = data[index];
 4  // style is passed by the List component to give our Row the correct dimensions
 5  return (
 6    <div style={style} key={index}>
 7      <Movie key={index} {...movie} />
 8    </div>
 9  );
10};

我们不会进入电影组成部分,因为这并不重要,基本上这就是我们对每部电影的看法。

汽车组件

随着我们的原始组件的创建,我们可以实施我们的列表组件,我们将其包装成一个AutoSizer组件:

 1<AutoSizer>
 2  {({ height, width }) => (
 3    <List
 4      className="List"
 5      height={height}
 6      itemCount={1000}
 7      itemSize={150}
 8      width={width}
 9      itemData={moviesList}
10    >
11      {Row}
12    </List>
13  )}
14</AutoSizer>

AutoSizer组件将自动将我们的Row组件的尺寸扩展到其容器,通过将高度宽度传递给我们的列表组件。

要安装AutoSizer,运行npm install react-virtualized-auto-sizer,然后导入:

1import AutoSizer from 'react-virtualized-auto-sizer';

列表组件

列表组件非常简单,正如你可以看到的,我们有一个名为itemData的插件,我们通过我们的所有5000电影,这让我们可以在我们的原始组件中访问一个单独的电影。

1const movie = data[index];

itemSize是每个行的高度,其余的是相当简单的。

<$>[注] 列表组件默认情况下将风格索引插件传递给我们的原始组件 <$>

现在一切都好了,让我们看看我们的FPS计数器,这次它更接近我们的60fps目标。

Good Frame Rate

如果你克隆了复制品,并比较了这两个分支,你也会看到初始渲染速度有多快。

Good Audit

起初,我们在我们的表演中得到了63,但现在我们得到了100。我们的第一个有意义的绘画只有1.1s,而不是4.8s没有反响窗口

包装上

您可以从上面看到反应窗口有多强大。我们的应用程序非常简单,但我们仍然可以看到伟大的性能效益。

Published At
Categories with 技术
Tagged with
comments powered by Disqus