2016-05-05 5 views
9

Moja aplikacja to aplikacja Cordova. W tym tygodniu widziałem wiele ostrzeżeń na mojej konsoli:Co to jest to ostrzeżenie konsoli, które ciągle otrzymuję - Odroczone, długotrwałe zadania timera, aby poprawić płynność przewijania?

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

Nigdy nie widziałem tego przed tym tygodniem. Używam wielu rozliczeń, ponieważ niektóre procesy są dość duże i dlatego nie przekazują użytkownikowi tego przetwarzania.

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

Czy to jest fałszywy pozytyw, czy jest lepszy sposób.

Pełny powód tych głupich przekroczeń czasu to upewnienie się, że użytkownik wie, kiedy klika przycisk, aby przekazać dane do wiadomości.

Stary sposób:

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

nie gwarantuje świadczenia użytkownikowi proces.

Odpowiedz

12

Ostrzeżenie informuje, że licznik czasu nie został uruchomiony na czas, ponieważ jest to odległy telefon (> 50 ms), a użytkownik miał zamiar przewinąć. Oddzwanianie jest uruchomione, dlatego Chrome nie może rozpocząć przewijania strony, co powoduje "jank", a dane wejściowe użytkownika nie są obsługiwane w odpowiednim czasie. Aby zwiększyć wygodę użytkownika, Chrome postanowił odłożyć to wezwanie do momentu, w którym uruchomienie go nie wpłynie negatywnie na użytkownika.

Nie znam szczegółów tego, co próbujesz zrobić, ale prawidłowym sposobem na zrobienie tego byłoby zrzucenie jednego dużego wywołania zwrotnego na mniejsze partie i rozłożenie ich tak, aby żadne połączenie nie zauważalnie opóźnić działania użytkownika. Możesz dodatkowo przyjrzeć się użyciu numeru requestIdleCallback, który będzie wywoływał Twoją funkcję tylko wtedy, gdy Chrome jest bezczynny i idealnie nadaje się do niekrytycznych zadań krytycznych. (Jednak requestIdleCallback jest teraz obsługiwany tylko w Chrome).