Performance 在颤振中使用大量图像(缩略图)提高滚动性能
我一直在制作一个有水平列表的应用程序(类似于Spotify)。在这些水平列表中,是使用CachedNetworkImage小部件显示的缩略图 我还没有设法使滚动性能平稳(每帧少于16毫秒,或者接近16毫秒) 以下是一些示例代码(使用lorem picsum获得随机生成的JPEG): 有效地(尽管在实际应用中这会明显不同),列表中有600个图像(30个水平列表,每个列表20个图像)要显示。lorem picsum自动生成的JPEG为100x100 这是否过于雄心勃勃,无法在颤振中顺利执行,还是我在这里遗漏了什么?我会关注颤振团队优化颤振应用程序的情况。基本上,对于列表中显示的每个项目,您至少要创建15个新的小部件(const小部件应该被缓存),这将是600*15=9000个小部件Performance 在颤振中使用大量图像(缩略图)提高滚动性能,performance,listview,flutter,dart,flutter-layout,Performance,Listview,Flutter,Dart,Flutter Layout,我一直在制作一个有水平列表的应用程序(类似于Spotify)。在这些水平列表中,是使用CachedNetworkImage小部件显示的缩略图 我还没有设法使滚动性能平稳(每帧少于16毫秒,或者接近16毫秒) 以下是一些示例代码(使用lorem picsum获得随机生成的JPEG): 有效地(尽管在实际应用中这会明显不同),列表中有600个图像(30个水平列表,每个列表20个图像)要显示。lorem picsum自动生成的JPEG为100x100 这是否过于雄心勃勃,无法在颤振中顺利执行,还是我在
如果要跳转到解决方案,请尝试将项目提取到无状态小部件中,该小部件接受当前索引作为参数并呈现项目。这很可能会加快速度。我确实看了那场演讲,但出于某种原因,天文台似乎对我不起作用(),无论如何,我尝试了你所说的,它大大提高了性能,所以我会接受。谢谢!
Widget build(BuildContext context) {
return new Scaffold(
backgroundColor: Colors.black,
body: new CustomScrollbar(
child: new ListView.builder(
controller: _scrollController,
itemCount: 30,
itemBuilder: (context, index){
return new Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
child: new Container(
width: double.infinity,
height: 100.0,
child: new ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 20,
itemBuilder: (context, innerIndex){
return new Padding(
padding: const EdgeInsets.symmetric(horizontal: 10.0),
child: new Container(
height: 100.0,
width: 100.0,
alignment: Alignment.center,
decoration: BoxDecoration(
border: Border.all(color: Colors.white, width: 1.0),
borderRadius: BorderRadius.circular(10.0)
),
child: new ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: new CachedNetworkImage(
imageUrl: _thumbnailsByArtist[index.toString()][innerIndex],
),
),
),
);
}
),
),
);
}
),
)
);
}