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. :)
źródło
Odpowiedzi:
„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 JavaScript
itook 83ms of runtime
ostrzegamy, ż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).
źródło
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,
setTimeout
jak poniżej:[Violation] 'setTimeout' handler took 43129ms
Ta liczba (43129 ms) zależy od czasu zatrzymania funkcji asynchronicznej
źródło
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.
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.
źródło