当RedzedList在React Native中更新缓慢时返回的对象的含义


纾潆锦袖迷子
2025-03-17 08:38:38 (7天前)
  1. 我正在为我的大学校园制作一个社交网络应用程序。我正在使用React Native。现在我正在使用Redux维护我的app状态,React-redux将状态绑定到各种React ...

2 条回复
  1. 0# trpnest | 2019-08-31 10-32



    React Native’s


    FlatList


    由内部支持


    VirtualizedList


    。后者使用了


    onScroll


    它的事件


    ScrollView


    衡量绩效指标。



    主要指标,

    dt



    prevDt

    测量频率

    onScroll

    事件发生了火灾

    ScrollView

    。两者都是通过存储当前时间戳来测量的

    onScroll

    触发事件并将其与上次存储的值进行比较。

    dt

    是目前的三角洲,

    prevDt

    是在前一次事件火灾中测量的delta。



    以简化的方式,此交互如下所示,您可以查看完整代码

    在这里





    1. onScroll(event) {
      const timestamp = event.timeStamp;
      const dt = timestamp - this.previousTimestamp;
      // …
      this.previousTimestamp = timestamp;
      }

    2. </code>


    这可以衡量React Native的Javascript端从本机端接收事件的频率。这是一种间接但非常有效的方法来衡量您的列表是否需要很长时间才能在本机上进行渲染。




    contentLength

    是呈现内容的大小,通常直接与呈现所述内容所花费的时间相关联。如果您的内容是水平的,那么它是您渲染内容的高度,对于垂直视图,它是宽度。




    1. onScroll(event) {
      // …
      const contentLength = event.nativeEvent.contentSize.height;
      const visibleLength = event.nativeEvent.layoutMeasurement.height;
      // …
      }

    2. </code>


    所以回顾一下:





    • dt

      是最后两次之间的时间

      onScroll

      事件触发,它是渲染时间的间接度量。



    • prevDt

      预先测量一个周期的测量值。



    • contentLength

      是渲染内容的主要尺寸(宽度或高度)





    满足以下所有条件时抛出警告(请参阅

    原始代码

    ):




    • 当前渲染耗时超过500毫秒(这意味着

      dt > 500




    • 之前的渲染也耗时超过500毫秒(

      prevDt > 500




    • 渲染内容比实际屏幕尺寸大五倍以上(

      contentLength > 5 * visibleLength





    简而言之,当您的渲染时间很长并且您一次渲染大量内容时,会抛出错误。为了获得良好的用户体验,可以假设推荐值低于显示的值。



    如何减少这些问题超出了这个问题的范围,但抛出的错误为您提供了许多良好的起点(


    React.PureComponent





    shouldComponentUpdate()


    等等)。


登录 后才能参与评论