我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性

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

本文关键字:高滚动 任务 滚动 运行 控制台 一直 警告 是什么 长时间 推迟 计时器      更新时间:2023-09-26

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

没有保证向用户呈现该过程。

警告告诉您,您的计时器没有按时启动,因为这是一个长时间运行的回调(>50ms),并且用户将要滚动。当你的回调正在运行时,Chrome无法开始滚动页面,因此这会导致"jank",即用户输入无法及时处理。为了让用户体验更好,Chrome决定推迟启动回调,直到运行回调不会对用户产生负面影响。

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