反应本机性能问题

时间:2020-08-13 23:49:19

标签: javascript reactjs multithreading react-native native

我有一个react native应用,该应用具有一个使用pubnub作为后端的聊天界面。

按下发送按钮时,清除输入要很长时间,并且消息会显示在Feed中。

按下发送按钮时会发生一些事情:

    调用
  1. setState将输入值设置为:''
  2. 将消息的临时副本添加到消息数组(提要)中-这些消息作为@observable []存储在mobx中
  3. 此时,列表应随着可观察对象的更新而更新
  4. 邮件的有效负载使用RSA-Sha256签名
  5. 邮件已发送到pubnub
  6. 该应用从pubnub接收消息(已订阅频道),并替换了临时消息。
    *从pubnub发送时,所有消息均使用RSA-Sha256进行验证

我确定对消息进行签名是使事情变慢的原因。

使用https://github.com/kjur/jsrsasign

在JS中进行签名和验证

根据我对线程的了解,听起来这可能阻止了JS线程在消息数组更新时告诉UI线程更新。

我想出了一些可能的解决方案,并且想知道什么是最好的方法

  1. 在执行消息签名和发送的代码周围添加setTimeout。我认为这不是有效的解决方案,但确实允许Feed进行更新。

  2. 在Objective-c / java中进行签名,然后将签名后的消息发送回JS以发送到pubnub。
    这完全有帮助吗?我以为它可能运行得更快,或者至少释放了JS线程,但是如果它在UI线程上运行,那还会导致延迟吗?
    如何创建另一个代码运行代码呢?

  3. 使用WebView执行JS:https://medium.com/@inkdrop/a-simple-way-to-run-js-in-background-thread-on-react-native-8fff345576da
    我不愿意使用这种方法。我应该担心吗?
    我不是在寻找一种快速/简便的方法来完成此任务(如果它牺牲了任何东西)。可靠性,安全性...

  4. 使用此库:https://github.com/joltup/react-native-threads-我在这里关注的是:“使用此库的主要折衷是内存使用,因为创建新的JS进程会产生大量开销。”

还有其他想法吗?

0 个答案:

没有答案