Aggiornamento : Chrome 58+ ha nascosto questi e altri messaggi di debug per impostazione predefinita. Per visualizzarli, fai clic sulla freccia accanto a "Informazioni" e seleziona "Dettagli".
Chrome 57 ha attivato "nascondi violazioni" per impostazione predefinita. Per riattivarli è necessario abilitare i filtri e deselezionare la casella "nascondi violazioni".
improvvisamente appare quando qualcun altro è coinvolto nel progetto
Penso che sia più probabile che tu abbia aggiornato a Chrome 56. Questo avviso è una nuova meravigliosa funzionalità, a mio avviso, ti preghiamo di disattivarlo solo se sei disperato e il tuo valutatore ti toglierà i voti. I problemi sottostanti sono presenti negli altri browser, ma i browser non ti stanno dicendo che c'è un problema. Il biglietto Chromium è qui ma non c'è davvero nessuna discussione interessante su di esso.
Questi messaggi sono avvertimenti invece di errori perché non causeranno problemi importanti. Potrebbe causare la caduta dei frame o comunque un'esperienza meno fluida.
Vale comunque la pena indagare e correggere per migliorare la qualità della tua applicazione. Il modo per farlo è prestando attenzione alle circostanze in cui appaiono i messaggi e facendo test delle prestazioni per restringere il luogo in cui si sta verificando il problema. Il modo più semplice per avviare il test delle prestazioni è inserire un codice come questo:
function someMethodIThinkMightBeSlow() {
const startTime = performance.now();
// Do the normal stuff for this function
const duration = performance.now() - startTime;
console.log(`someMethodIThinkMightBeSlow took ${duration}ms`);
}
Se vuoi essere più avanzato, puoi anche utilizzare il profiler di Chrome o utilizzare una libreria di benchmarking come questa .
Una volta trovato del codice che impiega molto tempo (50ms è la soglia di Chrome), hai un paio di opzioni:
- Elimina alcune / tutte quelle attività che potrebbero non essere necessarie
- Scopri come svolgere la stessa attività più velocemente
- Dividi il codice in più passaggi asincroni
(1) e (2) possono essere difficili o impossibili, ma a volte è davvero facile e dovrebbero essere i tuoi primi tentativi. Se necessario, dovrebbe essere sempre possibile farlo (3). Per fare questo userai qualcosa come:
setTimeout(functionToRunVerySoonButNotNow);
o
// This one is not available natively in IE, but there are polyfills available.
Promise.resolve().then(functionToRunVerySoonButNotNow);
Puoi leggere di più sulla natura asincrona di JavaScript qui .