我正在尝试使用React Native,并且必须使用多个水平FlatLists图像呈现看似不复杂的页面。
看起来像这样:
render() {
return (
<View>
<CustomImagesFlatListView data={data1} />
<CustomImagesFlatListView data={data2} />
<SomeOtherComponent />
<CustomImagesFlatListView data={data3} />
</View>
);
}
但是我注意到,只要该页面(组件)被挂载(或加载),就会有一个非常明显的屏幕冻结,然后才能完全呈现组件并且UI才能正常运行。
我有什么遗漏/做错了或者这是预期的。总共至少有50个图像(从网上加载),但是使用FlatList它应该是延迟加载的,所以这种性能上的滞后很奇怪。
答案 0 :(得分:2)
您可以通过不同方式改善表现。
我在我的React Native应用程序中创建了一个ThreadHelper,性能比之前更好(快90%)。这是代码:
import {InteractionManager } from 'react-native';
export default class ThreadHelper{
/**
* Promise resolved as soon as the requestAnimationFrame goes on
*/
nextFrame(){
return new Promise((resolve, reject) => {
requestAnimationFrame(() => {
LOG.debug("ThreadHelper :: requestAnimationFrame");
resolve();
});
})
}
runWhenThreadIsReady(callback){
InteractionManager.runAfterInteractions(async () => {
LOG.debug("ThreadHelper :: runAfterInteractions...");
await this.nextFrame();
callback();
});
}
}
您可以在组件中导入ThreadHelper,并在检索图像时调用:
this.threadHelper.runWhenThreadIsReady(() => {
//your code here
//For example getImagesFromEndpoint and then this.setState({images:Array});
});
在我的应用程序中,我有多个图像库,每个图像库超过100个图像,我可以快速显示它们。用户可以在不被阻止的情况下与页面进行交互。