Was ist diese Konsole Warnung, die ich erhalte - Latente long-running timer-task(s) zu verbessern scrolling smoothness?
Meine Anwendung ist eine Cordova-App. Diese Woche habe ich gesehen, dass viele Warnungen in meiner Konsole:
Deferred long-running timer task(s) to improve scrolling smoothness. See crbug.com/574343.
Nie gesehen diese Woche. Ich benutze eine Menge von settimeouts als einige der Prozesse sind Recht groß und daher nicht Rendern, um den Benutzer, dass seine Verarbeitung.
//GETS MEDICINES VIA MYCLOUD
function getMedicinesFromServer() {
//Start Process
myProcess("Syncing Medicines", true);
setTimeout(function () {
var data = getAllModifiedMedicines(viewModel.MedicineCupboard());
sendAllMedicines(data);
}, 300);
}
Ist das ein false positive oder ist es eine bessere Art und Weise.
Vollen Grund für diesen dummen timeouts, um sicherzustellen, das der Benutzer kennt, wenn Sie klicken Sie auf eine Schaltfläche zum senden der Daten, bis Sie bewusst gemacht wird.
Alte Weg:
myProcess("Syncing Medicines", true);
var data = getAllModifiedMedicines(viewModel.MedicineCupboard());
sendAllMedicines(data);
Nicht garantieren das Rendern der Benutzer den Prozess.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Warnung sagt dir, dass dein timer nicht ausgelöst auf Zeit, weil es ist eine lange ausgeführt callback (> 50 MS) und der user war/ist zu scrollen. Während Ihr Rückruf wird ausgeführt, Chrome kann nicht gestartet werden, scrollen die Seite, so dass diese Ergebnisse in "jank", user-input nicht behandelt wird, in einer fristgerechten Weise. Die Erfahrung besser zu machen für den Benutzer, Chrome entschieden zu verschieben, feuern Rückruf bis zu einer Zeit, wo es läuft keine negativen Auswirkungen auf den Benutzer.
Ich weiß nicht, die details von dem, was Sie zu tun versuchen, aber der richtige Weg, Dinge zu tun wäre, um Stück bis Ihr einen großen Rückruf in kleinere Stapel und breitete Sie aus, so dass jeder Anruf wird nicht merklich verzögern die Aktionen des Benutzers. Sie konnte zusätzlich Einblick in die Verwendung requestIdleCallback, die rufen Sie Ihre Funktion nur, wenn Chrome im Leerlauf ist und ist ideal geeignet für nicht-Zeitkritische Aufgaben. (Allerdings requestIdleCallback nur unterstützt Chrome jetzt).