Naruszenie przeglądarki Chrome: [Naruszenie] program obsługi zajął 83 ms czasu działania

87

Próbuję zaimplementować w moim projekcie funkcję wylogowania z Facebooka. Logowanie działa dobrze. Ale mam do czynienia z otrzymaniem następującego komunikatu w konsoli JavaScript z kodem wylogowania.

[Naruszenie] Długotrwałe zadanie JavaScript trwało 318 ms session.php: 51 1 sdk.js: 135

[Naruszenie] Obsługa zajęła 83 ms czasu działania (dozwolone 50 ms)

Próbowałem poszukać innych podobnych wątków i te rozwiązania mi nie wyszły. Próbowałem usunąć części mojego kodu i zobaczyć, która część powoduje problem. Jest całkiem jasne, że pojawia się błąd z powodu SDK JS Facebooka, jak widać w komunikacie. Wyłączyłem też wszystkie moje rozszerzenia Chrome.

Kod działa dobrze w Firefoksie, ale nie w Chrome ani w Operze . Czy jest jakaś metoda przedłużenia tego limitu czasu? Lub jakakolwiek inna metoda rozwiązania tego problemu w przeglądarce Chrome. Oto mój kod do wylogowania.

<?php
    session_start();
    //echo $_SESSION["current_user"];
    //echo $_COOKIE["current_user"];
    session_destroy();
    unset($_COOKIE["current_user"]);
    setcookie("current_user","",time() -3600, "/","", 0);
    //header("location: login.php");
?>

<!doctype html>

<html>
<head>
</head>
<body>

<script>

    // Default settings
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '<app-id>',
            cookie     : true,
            xfbml      : true,
            version    : 'v2.8'
        });
        FB.AppEvents.logPageView();   
    };

    (function(d, s, id){
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));

    window.onload = function(){
        logout();
    }
    function logout(){
        console.log("1");
        FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            FB.logout();
            console.log("2");
            window.location="login.php";
            console.log("3");
        }
        else{
            console.log("4");
            window.location="login.php";
            console.log("5");
        }
        });
    }
</script>
</body>
</html>

Z oczywistych powodów usunąłem App-Id z kodu. Każda pomoc jest mile widziana. :)

FreeKrishna
źródło
1
To tylko ostrzeżenie, nie musisz się tym przejmować, twój kod nadal będzie działał.
NoNameProvided Lutego
1
@NoNameProvided Ale funkcja wylogowania nie działa w Chrome. Nie udaje się przekierować do strony login.php w przeglądarce Chrome.
FreeKrishna
3
Wydarzenie, jeśli to nie działa, nie jest związane z komunikatami o naruszeniach. Są tylko nieformalne i nie mają wpływu na Twój kod.
NoNameProvided Lutego
1
@NoNameProvided W takim razie dlaczego kod działa w Firefoksie, ale nie w Chrome? Sprawdziłem kod, jest poprawny. Możesz sam spojrzeć.
FreeKrishna
2
Wygląda na to, że jest to duplikat: stackoverflow.com/questions/41218507/…
oklas

Odpowiedzi:

184

„Naruszenia dotyczące Chrome” nie oznaczają błędów w Chrome ani w Twojej własnej aplikacji internetowej. Zamiast tego są ostrzeżeniami, które pomogą Ci ulepszyć aplikację. W tym przypadku Long running JavaScripti took 83ms of runtimeostrzegamy, że prawdopodobnie istnieje możliwość przyspieszenia skryptu.

(„Naruszenie” nie jest najlepszą terminologią. Używa się go tutaj, aby zasugerować, że skrypt „narusza” wstępnie zdefiniowane wytyczne, ale „ostrzeżenie” itp. Byłoby bardziej zrozumiałe. Te wiadomości po raz pierwszy pojawiły się w Chrome na początku 2017 roku i powinny mieć „Więcej informacji” zachęca do wyjaśnienia znaczenia i zasugerowania programiście działań. Mamy nadzieję, że zostaną one dodane w przyszłości).

mahemoff
źródło
30

Być może trochę poza tematem, po prostu poinformuj, że tego rodzaju komunikaty można również zobaczyć podczas debugowania kodu z punktem przerwania wewnątrz funkcji asynchronicznej, setTimeoutjak poniżej:

[Violation] 'setTimeout' handler took 43129ms

Ta liczba (43129 ms) zależy od czasu zatrzymania funkcji asynchronicznej

Reza
źródło
2
Dzięki temu komentarzowi udało mi się znaleźć ten temat i uzyskać odpowiedź, poza tematem lub nie, było to bardzo przydatne.
stramin
12

Wygląda na to, że znalazłeś swoje rozwiązanie, ale nadal będzie pomocne dla innych, na tej stronie w oparciu o Chrome 59.

4. Zwróć uwagę na czerwony trójkąt w prawym górnym rogu zdarzenia Uruchomienie klatki animacji. Za każdym razem, gdy widzisz czerwony trójkąt, jest to ostrzeżenie, że może istnieć problem związany z tym wydarzeniem.

Jeśli najedziesz kursorem na ten trójkąt, zobaczysz, że są to błędy obsługi naruszeń i zgodnie z punktem 4. Tak, jest pewien problem związany z tym zdarzeniem.

Prafulla Kumar Sahu
źródło