为什么在React Native中

时间:2015-12-03 18:47:20

标签: react-native

通常只会立即呈现简单的ListView行。但是,有时候渲染会慢慢进行,您可以看到正在绘制的屏幕。是什么原因造成的?

我首先在我正在构建的应用程序中注意到它试用了React Native,但也能够在react-native存储库Movies example中可靠地重现。重现:

  • 打开电影示例项目并在iOS模拟器中运行
  • 搜索常用字词(例如“快速”)
  • 一次删除一个字符。
  • 请注意,一旦获取数据,屏幕会立即更新。
  • 现在搜索一个无意义的单词(例如“asdf”)
  • 一次删除一个字符。
  • 请注意,搜索结果列表的行数几乎一次出现几次。与第一次查询的即时重绘相比,它明显缓慢。

你应该看到这样的事情:

animated gif showing screen redraw comparison

我注意到,从反应的角度来看,ListView在屏幕上完全可见之前就完成了渲染。我通过将回调传递给导致setState重新呈现的ListView调用找到了这一点。回叫会将一条消息记录到控制台,并在绘制完整屏幕之前略微显示该消息。

我非常想知道其他人是否观察到这一点以及是否可以避免。它经常在我的应用程序中发生,并使实时搜索感觉非常慢。

1 个答案:

答案 0 :(得分:3)

您是否尝试过添加" initialListSize'在ListView上?如果事先知道最小列表大小,我发现它的性能提升了很多。

编辑 - 来自文档:

  

速率限制行渲染 - 默认情况下,每个事件循环只渲染一行(使用pageSize prop自定义)。这会将工作分解为更小的块,以减少渲染行时丢帧的可能性。

尝试将pageSize = {10}添加到ListView