Aktualizacja : Chrome 58+ domyślnie ukrył te i inne komunikaty debugowania. Aby je wyświetlić, kliknij strzałkę obok „Informacje” i wybierz „Pełne”.
Chrome 57 domyślnie włączył opcję „ukryj naruszenia”. Aby je ponownie włączyć, musisz włączyć filtry i odznaczyć pole „ukryj naruszenia”.
nagle pojawia się, gdy ktoś inny zaangażowany w projekt
Myślę, że bardziej prawdopodobne jest, że zaktualizowałeś przeglądarkę Chrome 56. To ostrzeżenie jest cudowną nową funkcją, moim zdaniem, wyłącz ją tylko, jeśli jesteś zdesperowany, a Twój asesor odbierze ci oceny. Problemy leżą u podstaw innych przeglądarek, ale przeglądarki po prostu nie informują o problemie. Bilet Chromium jest tutaj ale tak naprawdę nie ma żadnej interesującej dyskusji na jego temat.
Te komunikaty są ostrzeżeniami zamiast błędów, ponieważ tak naprawdę nie będą powodować poważnych problemów. Może to powodować upuszczanie ramek lub w inny sposób powodować mniej płynne działanie.
Warto je jednak zbadać i naprawić, aby poprawić jakość aplikacji. Można to zrobić, zwracając uwagę na okoliczności, w których pojawiają się komunikaty, i przeprowadzając testy wydajności, aby zawęzić miejsce występowania problemu. Najprostszym sposobem rozpoczęcia testowania wydajności jest wstawienie takiego kodu:
function someMethodIThinkMightBeSlow() {
const startTime = performance.now();
// Do the normal stuff for this function
const duration = performance.now() - startTime;
console.log(`someMethodIThinkMightBeSlow took ${duration}ms`);
}
Jeśli chcesz być bardziej zaawansowany, możesz także użyć profilera Chrome lub skorzystać z biblioteki testów porównawczych, takiej jak ta .
Gdy znajdziesz trochę kodu, który zajmuje dużo czasu (50 ms to próg Chrome), masz kilka opcji:
- Wytnij część / całość tego zadania, które może być niepotrzebne
- Dowiedz się, jak szybciej wykonać to samo zadanie
- Podziel kod na wiele asynchronicznych kroków
(1) i (2) mogą być trudne lub niemożliwe, ale czasem są naprawdę łatwe i powinny być twoimi pierwszymi próbami. W razie potrzeby zawsze powinno być to możliwe (3). Aby to zrobić, użyjesz czegoś takiego:
setTimeout(functionToRunVerySoonButNotNow);
lub
// This one is not available natively in IE, but there are polyfills available.
Promise.resolve().then(functionToRunVerySoonButNotNow);
Możesz przeczytać więcej o asynchronicznej naturze JavaScript tutaj .