javascript - 从 SignalR Server 接收实时数据时,React Native 屏幕在使用一段时间后变慢
问题描述
我的这个问题会更长一点。
我正在使用react-native
开发一个交易应用程序。我已添加native-base
为组件库。
signalr
应用程序使用桌面服务器上托管的服务器的实时数据馈送。
该桌面服务器从 API 提供商发送实时市场数据,并将该数据广播到所有连接的移动客户端。
现在,问题是,当在手机上接收数据时,手机屏幕对于组件和价格更新变得非常缓慢。它有时会冻结整个应用程序,我需要重新启动它。
在我的移动应用程序中,我有一个watchlist
屏幕,它首先从数据库中加载保存的股票名称数据FlatList
,然后连接到signalr
服务器以接收实时数据。
然后我监听数据接收,并FlatList
使用状态更新更新数据,以便实时价格反映在列表中。有时它工作正常,但使用一段时间后,它变得很慢,其他 GUI 组件也变得很慢。
以下是接收、渲染和更新数据的代码FlatList
proxy.on("msgreceived", (msg) => {
if (typeof this.state.watchlistsymboldata != "undefined") {
this.state.watchlistsymboldata.forEach((item) => {
if (item.Symbolid != undefined) {
if (item.Symbolid === msg.symbolid) {
//console.log(msg);
item.bidprice = parseFloat(msg.bidprice).toFixed(2);
item.bidqty = parseInt(msg.bidquantity);
item.askprice = parseFloat(msg.askprice).toFixed(2);
item.askqty = parseInt(msg.askquantity);
item.ltp = parseFloat(msg.ltp).toFixed(2);
item.open = parseFloat(msg.open).toFixed(2);
item.high = parseFloat(msg.high).toFixed(2);
item.low = parseFloat(msg.low).toFixed(2);
item.timetraded = msg.timestamp;
item.cellcolor = msg.cellcolor;
item.bidcolor = msg.bidcolor;
item.askcolor = msg.askcolor;
this.setState({updateState:true});//THIS IS NEEDED TO REFLECT CHANGES
}
}
});
}
});
如何在不给应用程序带来任何繁重负载的情况下使这项工作更顺畅?谢谢。
解决方案
推荐阅读
- spring-boot - 如何为特定客户端设置自定义 Feign RequestInterceptor?
- mongodb - 在 mongo shell 中插入文档时出错
- python - 如何使用 pandas 记录跨列是否发生特定更改?
- javascript - Git:发布版本的不同分支
- python - 如何为 Orange3 独立安装安装 Python 包
- arrays - 打字稿:如果条件为真,则在数组中添加项目
- vue.js - 如何使用 Vue-SweetAlert2 在单个弹出窗口中传递对象输入并更新数据
- angular - 在 ngx-bootstrap(angular7,bootstrap4)中,键盘向上箭头无法正常工作,无法使用 typeahead 控件进行分组
- python - 图像在 skimage 中包含除 0 或 1 错误以外的值
- python - 基于聚合数据框填充数据框