【问题标题】:React Native Warning: "Setting a timer for a long period of time...". How to locate cause?React Native 警告:“长时间设置计时器......”。如何定位原因?
【发布时间】:2018-03-12 19:26:29
【问题描述】:

iOS 上的一切正常。在 Android 上,我收到警告“长时间设置计时器,即多分钟,是 Android 上的性能和正确性问题,因为它使计时器模块保持唤醒状态,并且只能在应用程序中时调用计时器前景。有关更多信息,请参阅https://github.com/facebook/react-native/issues/12981。(看到 setTimeout 持续时间为 589668 毫秒)“

我没有在我的应用程序中使用任何计时器,所以我假设这是来自我安装的 NPM 模块。如何确定是哪一个导致了这种情况?

我知道我可以ignore the waring,但我想向模块维护者报告这个问题。

【问题讨论】:

    标签: android node.js reactjs react-native


    【解决方案1】:

    这是一个警告,即某些 javascript 依赖项将因 react-native 本身的问题而引发,必须在 react-native 的代码库中解决,但不必担心。如果它打扰你只需添加console.ignoredYellowBox = ['Setting a timer'];。要找出导致它的依赖项,您必须使用 chrome 调试应用程序并确保启用源映射。

    【讨论】:

    • 把它放在脚本的开头
    【解决方案2】:

    https://github.com/facebook/react-native/issues/12981 说你需要编辑服务器文件。在你的 index.js 文件中

    var server = require('https').Server(options, app);
    var io = require('socket.io')(server);
    

    改成

    var server = require('https').Server(options, app);
    var io = require('socket.io')(server,{pingTimeout: 30000});
    

    然后运行forever restartall重启

    【讨论】:

      【解决方案3】:

      此链接将对您有所帮助 https://github.com/facebook/react-native/issues/12981#issuecomment-499827072

      代码(来自这里:firebase/firebase-js-sdk#97(评论))只是简单地包装了 setTimeout(全局)函数,以防止它被长时间使用。

      在我们修改后的 global.setTimeout 函数中,如果持续时间大于阈值 MAX_TIMER_DURATION_MS,我们会在本地映射 (timerFix) 中保存一个 id,然后调用 runTask 将持续时间拆分为更小的值。 runTask 使用较小的块设置超时(使用原始的_setTimeout),这些块将连续执行,直到等待时间太小。当 waitingTime 足够小时,我们调用 React Native 的 runAfterInteractions 以顺利执行,同时,我们从本地映射中删除 id 条目,因为在这种情况下我们不会再次调用 _setTimeout。请注意,将 afterTime 输入 _setTimeout 以防止它被长时间调用。

      否则,在我们修改的global.setTimeout函数中,如果持续时间小于阈值MAX_TIMER_DURATION_MS,我们直接调用全局setTimeout(保存在_setTimeout中)。

      全局 clearTimeout 也被包装以通过从本地地图中删除 id 来执行清理过程。

      【讨论】:

        【解决方案4】:

        对于 firebase/firestore 用户:我只是恢复为直接使用 REST 端点进行 firestore 调用,而不是试图掩盖警告。因为我只需要 auth 和 firestore,这很容易解决我的问题。此处摘录:

        https://stackoverflow.com/a/62446792

        【讨论】:

          猜你喜欢
          • 2017-12-07
          • 2019-09-24
          • 2018-11-19
          • 2017-11-13
          • 1970-01-01
          • 1970-01-01
          • 2013-02-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多