【问题标题】:What is this console warning I keep getting - Deferred long-running timer task(s) to improve scrolling smoothness?我不断收到的控制台警告是什么 - 延迟长时间运行的计时器任务以提高滚动平滑度?
【发布时间】:2016-08-31 02:44:02
【问题描述】:

我的应用程序是一个 Cordova 应用程序。本周我在控制台中看到了很多警告:

Deferred long-running timer task(s) to improve scrolling smoothness. See crbug.com/574343.

本周之前从未见过。我确实使用了很多设置超时,因为一些进程非常大,因此不会向用户呈现它的处理过程。

// GETS MEDICINES VIA MYCLOUD
function getMedicinesFromServer() {
    // Start Process
    myProcess("Syncing Medicines", true);
    setTimeout(function () {
            var data = getAllModifiedMedicines(viewModel.MedicineCupboard());
            sendAllMedicines(data);
    }, 300);
}

这是误报还是有更好的方法。

这些愚蠢的超时的全部原因是确保用户知道他们什么时候点击了一个按钮来推送他们知道的数据。

老办法:

myProcess("Syncing Medicines", true);
var data = getAllModifiedMedicines(viewModel.MedicineCupboard());
sendAllMedicines(data);

不保证向用户呈现进程。

【问题讨论】:

    标签: javascript ajax cordova google-chrome chromium


    【解决方案1】:

    警告告诉您,您的计时器没有按时触发,因为它是一个长时间运行的回调 (> 50 毫秒),并且用户正在/即将滚动。当您的回调正在运行时,Chrome 无法开始滚动页面,因此这会导致“卡顿”,即用户输入未得到及时处理。为了给用户提供更好的体验,Chrome 决定推迟触发该回调,直到运行它不会对用户产生负面影响。

    我不知道你想要做什么的细节,但正确的做法是将你的一个大回调分成更小的批次并将它们分散开,这样任何一个调用都不会明显延迟用户操作。您还可以查看使用 requestIdleCallback ,它只会在 Chrome 空闲时调用您的函数,并且非常适合非时间关键任务。 (不过,目前只有 Chrome 支持 requestIdleCallback)。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多