列表配置优化
术语定义
-
VirtualizedList:
FlatList
背后的基础支撑组件(是 React Native 对虚拟列表 Virtual List
概念的实现)。 -
内存开销 Memory consumption: 列表在内存中存放多少数据。开销过大可能导致应用崩溃。
-
响应度 Responsiveness: 应用对于用户操作的响应速度。比如低响应度就是你在操作时,应用要卡一会儿才响应。
-
空白区 Blank areas: 当
VirtualizedList
渲染的速度跟不上你滑动的速度时,你可能会在列表中看到一些尚未完成渲染的空白占位元素。 -
视口 Viewport: 已渲染内容的可视区域。
-
滑动窗口 Window: 内容组件应该被挂载的区域,通常比视口(viewport)大得多。
Props
下面列出了一些可以提升FlatList
性能的重要技巧:
removeClippedSubviews
类型 | 默认值 |
---|---|
Boolean | False |
如果设为 true
,那些超出视口范围的视图会从原生视图层级结构中分离。
好处: 启用此选项可减少花在主线程上的时间,从而降低丢帧的风险。原理是对视口之外的视图不进行本地渲染和绘图遍历。
坏处: 请注意,这种实现可能会有 bug,比如丢失内容(主要是在 iOS 上观察到的),特别是当你使用变换和/或绝对定位做复杂的事情时。另外,请注意这并不会节省大量的内存,因为视图并没有被 销毁,只是被分离了。
maxToRenderPerBatch
类型 | 默认值 |
---|---|
Number | 10 |
这是一个可以通过 FlatList
传递的 VirtualizedList
属性。它控制每批渲染的元素数量,也就是每次滚动时渲染的下一组元素。
好处: 设置较大的数值意味着在滚动时会减少视觉上的空白区域(提高填充率)。
坏处: 每批处理更多元素意味着更长的 JavaScript 执行时间,可能会阻塞其他事件处理,例如按键操作,从而影响响应速度。
updateCellsBatchingPeriod
类型 | 默认值 |
---|---|
Number | 50 |
maxToRenderPerBatch
告诉 VirtualizedList
每批次渲染的元素数量,而 updateCellsBatchingPeriod
则用于设置两次批量渲染之间的延迟毫秒数(也就是组件渲染可见区域内元素的频率)。
好处: 将这个属性与 maxToRenderPerBatch
结合使用,你就可以灵活控制渲染的节奏,比如在频率较低时渲染更多元素,或者在频率较高时渲染较少元素。
坏处: 频率过低可能会导致出现空白区域,而频率过高则可能影响组件的响应速度。