我正在用React Native和Expo构建一个新的应用程序。这个程序的主要功能是为用户生成计划。生成算法大约需要300-500秒才能执行。(它包含最多2,100,000次随机生成。)
目前,我面临两个问题:
Q1。在测试期间,这段代码直接放在App.js-App类-render函数中。但是,如果执行时间超过32秒,则该应用将无法呈现,并且永远保持无响应。
所以问题是:
1.1最长32秒的原因是什么,否则无响应?
1.2有更好的测试方法吗?
当前测试方法:
export default class App extends React.Component {
componentDidMount() {
if (__DEV__) {
Reactotron.connect();
Reactotron.log('hello rendering world');
}
}
render() {
//test
generatePlan(store.getState(), 0);
return (
<Provider store={store}>
<AppContainer />
</Provider>
);
}
}
Q2。最后,单击“生成”按钮后,用户无法长时间呆呆。因此,理想情况下,此长时间执行的任务应在资源有限(包括内存和计算)的后台运行,以便用户可以在等待期间执行其他操作而不会受到太大影响(例如病毒扫描任务,一旦完成,就会弹出)留言等)
所以这里的问题是:
如何实现呢?
我试过的
对于第一季度:目前我不知道原因,甚至无法弄清楚要搜索的准确关键词。(我尝试在Google中搜索“反应本机执行时间长”,“无响应”等,以响应本机github问题,世博论坛,但没有运气。)
目前,我进行测试的想法是分别执行每个部分并手动存储每个部分的结果。然后使用每个部分的存储结果进行最后的部分。
对于第二季度:有一个库“ react-native-background-task”:
“该库允许调度单个定期任务,该任务在应用程序处于后台或关闭状态时执行,执行频率不超过每15分钟一次。可以使用网络,AsyncStorage等(除UI外的任何方式),因此非常适合诸如后台数据同步以提供离线支持。”
但是有关此潜在解决方案有两个问题:
一种。打开应用程序后如何在后台运行任务?
b。如何限制此任务使用的计算资源?(因为任务可以缓慢执行,但是如果用户仍在使用手机,则不应占用过多的计算资源。)
好吧,我不认为您的问题有一个明确的答案,但这是我的想法:
render()
方法内部执行任何操作都不是一个好习惯。每当更新状态或重新渲染组件时,都会频繁调用此方法。因此,它应该尽可能轻巧,并且只应包含返回的组件。此外,为了避免任何意外行为,该render()
方法应为纯方法。requestAnimationFrame
,例如,对于每个部分,例如,如果您的算法生成一个随机数,然后对其进行一些计算并重复此过程200万次,您将需要requestAnimationFrame
进行每次计算,将当前结果存储在某个地方,并请求另一帧进行下一次计算。
祝好运
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句