2016-05-05 18 views
9

La mia applicazione è un'app Cordova. Questa settimana ho visto molti avvisi nella mia console:Qual è questo avviso della console che continuo a ricevere - Attività timer a lungo termine rimandate per migliorare la scorrevolezza?

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

Mai visto prima di questa settimana. Io uso un sacco di settimeout come alcuni dei processi sono piuttosto grandi e quindi non rendono all'utente l'elaborazione.

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

È un falso positivo oppure esiste un modo migliore.

Pieno motivo per questi stupidi prespegnimenti è quello di garantire che l'utente sappia quando fa clic su un pulsante per spingere i dati in su sono resi consapevoli.

Vecchio modo:

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

non garantiva il rendering per l'utente il processo.

risposta

12

L'avviso indica che il timer non è stato attivato in tempo perché è un callback di lunga durata (> 50 ms) e l'utente stava/sta per scorrere. Mentre la tua callback è in esecuzione, Chrome non può iniziare a scorrere la pagina, quindi questo risulta in "jank", l'input dell'utente non viene gestito in modo tempestivo. Per rendere l'esperienza migliore per l'utente, Chrome ha deciso di rinviare l'attivazione di tale callback fino a un momento in cui l'esecuzione non influirà negativamente sull'utente.

Non conosco i dettagli di ciò che si sta tentando di fare, ma il modo corretto di fare le cose sarebbe quello di rimpicciolire la tua unica grande callback in gruppi più piccoli e distribuirli in modo che ogni chiamata non ritardare notevolmente le azioni dell'utente. Puoi inoltre utilizzare requestIdleCallback che chiamerà la tua funzione solo quando Chrome è inattivo ed è ideale per attività non urgenti. (Tuttavia, requestIdleCallback è supportato solo su Chrome al momento).

Problemi correlati