【问题标题】:What does 'Long lists' mean in flutter's list view builderFlutter listview builder中的“长列表”是什么意思
【发布时间】:2020-11-14 06:21:48
【问题描述】:

在文章https://flutter.dev/docs/cookbook/lists/long-lists 中,他们说在处理长列表时可以使用列表视图构建器。但“长名单”是什么意思?是数百、数千还是数万个条目?还是仅仅意味着一个动态列表?

在我的代码中,我一直在根据尝试使用列表视图构建器来决定如何构建应用程序(例如,我没有在其他滚动视图中嵌套列表,因为这似乎删除了构建器功能),但这使我的代码更加复杂。

我在 --profile 模式下运行了一个包含 10000 个 ListTile 小部件的应用程序,发现它们在滚动和初始加载期间都非常高效。我真的看不出与性能叠加的区别。所以我真的不知道要对 ListView.builder 下什么结论。

编辑:应该注意我在廉价的三星 Galaxy A10 上进行了测试

【问题讨论】:

  • 在您的 ListView 中,如果有 100 个项目,您会在初始化列表视图时创建这 100 个项目并将其设置为列表视图的子项,还是使用构建器创建这些项?如果您更喜欢第二种方式(构建器),那么我们可以称其为长列表
  • listview builder 只是懒惰地构建小部件,这意味着它只在必要时构建它。例如:当用户向下滚动并且必须显示列表时。使用 ListView 不会高效,因为您将在显示任何内容之前先构建所有小部件。当您要在列表中构建 100 到 1000 个小部件时,这将导致在显示任何内容之前延迟几秒钟。

标签: flutter


【解决方案1】:

ListViewListView.Builder 在内部都扩展了 ScrollView,它从显式 [List] 创建一个可滚动的线性小部件数组。

这个ListView 适用于具有大(或 无限)孩子的数量,因为 builder 仅被调用 那些实际可见的孩子。

ListView 计算列表中所有项目的最大滚动范围,这实际上需要时间,但在性能方面并没有这样的影响,用户可以用眼睛看到。

ListView.Builder 应该在调用时实际创建小部件实例。 避免使用返回先前构建的小部件的构建器。所以它只计算可见项目的滚动意图,以防Listview 丢失。

因此没有具体的计数应该考虑在两者之间,但是如果我们有 100 个带有大型小部件树的项目,它将对滚动的内存使用产生一些影响。 为此,应该使用内存分析。

【讨论】:

  • 我猜你的回答是一个“长列表”只是一个超出视口的列表?
  • ViewPort 实际上定义了小部件的渲染,UI 线程有多少负载。
猜你喜欢
  • 2021-04-24
  • 2010-12-15
  • 2021-03-28
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
相关资源
最近更新 更多