我不断收到的控制台警告是什么 - 延迟长 运行 计时器任务以提高滚动平滑度?

What is this console warning I keep getting - Deferred long-running timer task(s) to improve scrolling smoothness?

我的应用程序是 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);

不保证向用户呈现该过程。

警告告诉您您的计时器没有按时触发,因为它是一个很长的 运行 回调(> 50 毫秒)并且用户 was/is 即将滚动。虽然您的回调是 运行,但 Chrome 无法开始滚动页面,因此这会导致 "jank",无法及时处理用户输入。为了让用户获得更好的体验,Chrome 决定推迟触发该回调,直到 运行 它不会对用户产生负面影响。

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