首页 > 解决方案 > 从 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
          }
        }
      });
    }
  });

如何在不给应用程序带来任何繁重负载的情况下使这项工作更顺畅?谢谢。

标签: javascriptreact-nativesignalrnative-base

解决方案


推荐阅读