React Native's FlatList 由内部支持 VirtualizedList 。后者使用了 onScroll 它的事件 ScrollView 衡量绩效指标。
FlatList
VirtualizedList
onScroll
ScrollView
主要指标, dt 和 prevDt 测量频率 onScroll 事件发生了火灾 ScrollView 。两者都是通过存储当前时间戳来测量的 onScroll 触发事件并将其与上次存储的值进行比较。 dt 是目前的三角洲, prevDt 是在前一次事件火灾中测量的delta。
dt
prevDt
以简化的方式,此交互如下所示,您可以查看完整代码 在这里 。
onScroll(event) { const timestamp = event.timeStamp; const dt = timestamp - this.previousTimestamp; // ... this.previousTimestamp = timestamp; }
这可以衡量React Native的Javascript端从本机端接收事件的频率。这是一种间接但非常有效的方法来衡量您的列表是否需要很长时间才能在本机上进行渲染。
contentLength 是呈现内容的大小,通常直接与呈现所述内容所花费的时间相关联。如果您的内容是水平的,那么它是您渲染内容的高度,对于垂直视图,它是宽度。
contentLength
onScroll(event) { // ... const contentLength = event.nativeEvent.contentSize.height; const visibleLength = event.nativeEvent.layoutMeasurement.height; // ... }
所以回顾一下:
满足以下所有条件时抛出警告(请参阅 原始代码 ):
dt > 500
prevDt > 500
contentLength > 5 * visibleLength
简而言之,当您的渲染时间很长并且您一次渲染大量内容时,会抛出错误。为了获得良好的用户体验,可以假设推荐值低于显示的值。
如何减少这些问题超出了这个问题的范围,但抛出的错误为您提供了许多良好的起点( React.PureComponent , shouldComponentUpdate() 等等)。
React.PureComponent
shouldComponentUpdate()