Chrome-Verletzung: [Verletzung] Der Handler benötigte 83 ms Laufzeit

81

Ich versuche, die Abmeldefunktion von Facebook in meinem Projekt zu implementieren. Login funktioniert gut. Ich sehe jedoch die folgende Meldung in der JavaScript-Konsole mit dem Abmeldecode.

[Verletzung] Die lange laufende JavaScript-Aufgabe dauerte 318 ms session.php: 51 1 sdk.js: 135

[Verletzung] Der Handler benötigte 83 ms Laufzeit (50 ms erlaubt)

Ich habe versucht, nach ähnlichen Threads zu suchen, und diese Lösungen haben für mich nicht funktioniert. Ich habe versucht, Teile meines Codes zu entfernen und festzustellen, welcher Teil ein Problem darstellt. Es ist ziemlich klar, dass es den Fehler aufgrund des JS SDK von Facebook bekommt, wie in der Nachricht zu sehen. Ich habe auch alle meine Chrome-Erweiterungen deaktiviert.

Der Code funktioniert in Firefox einwandfrei, jedoch weder in Chrome noch in Opera . Gibt es eine Methode für mich, um diese Timeout-Dauer zu verlängern? Oder eine andere Methode, um dieses Problem in Chrome zu beheben. Hier ist mein Code zum Abmelden.

<?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>

Aus offensichtlichen Gründen habe ich die App-ID aus dem Code entfernt. Jede Hilfe wird geschätzt. :) :)

FreeKrishna
quelle
1
Es ist nur eine Warnung, Sie müssen sich nicht darum kümmern, Ihr Code wird immer noch funktionieren.
NoNameProvided
1
@NoNameProvided Die Abmeldefunktion funktioniert jedoch nicht in Chrome. Es kann nicht zur Seite login.php in Chrome umgeleitet werden.
FreeKrishna
3
Ereignis, wenn es nicht funktioniert, bezieht es sich nicht auf die Verstoßmeldungen. Sie sind nur informell und haben keine Auswirkungen auf Ihren Code.
NoNameProvided
1
@NoNameProvided Wie kommt es dann, dass der Code in Firefox funktioniert, aber nicht in Chrome? Ich habe den Code überprüft, er ist korrekt. Sie können selbst einen Blick darauf werfen.
FreeKrishna
2
Es scheint ein Duplikat zu sein: stackoverflow.com/questions/41218507/…
oklas

Antworten:

172

"Chrome-Verstöße" stellen weder in Chrome noch in Ihrer eigenen Web-App Fehler dar. Sie sind stattdessen Warnungen, die Ihnen helfen, Ihre App zu verbessern. In diesem Fall Long running JavaScriptund took 83ms of runtimewenn Sie benachrichtigt werden, besteht wahrscheinlich die Möglichkeit, Ihr Skript zu beschleunigen.

("Verletzung" ist nicht die beste Terminologie. Sie wird hier verwendet, um zu implizieren, dass das Skript eine vordefinierte Richtlinie "verletzt", aber "Warnung" oder ähnliches wäre klarer. Diese Nachrichten wurden erstmals Anfang 2017 in Chrome angezeigt und sollten idealerweise eine haben "Weitere Informationen" fordert Sie auf, die Bedeutung zu erläutern und dem Entwickler Vorschläge für Maßnahmen zu unterbreiten. Hoffentlich werden diese in Zukunft hinzugefügt.)

Mahemoff
quelle
28

Vielleicht ein wenig abseits des Themas, seien Sie einfach informiert, dass diese Art von Nachrichten auch angezeigt werden, wenn Sie Ihren Code mit einem Haltepunkt in einer asynchronen Funktion wie der folgenden debuggen setTimeout:

[Violation] 'setTimeout' handler took 43129ms

Diese Zahl (43129 ms) hängt davon ab, wie lange Sie in Ihrer asynchronen Funktion anhalten

Reza
quelle
1
Dank dieses Kommentars konnte ich dieses Thema finden und eine Antwort erhalten, unabhängig vom Thema oder nicht, es war sehr nützlich.
Stramin
12

Es scheint, dass Sie Ihre Lösung gefunden haben, aber es wird dennoch für andere hilfreich sein, auf dieser Seite auf Punkt 59 basierend.

4.Beachten Sie das rote Dreieck oben rechts im Ereignis Animationsrahmen ausgelöst. Wenn Sie ein rotes Dreieck sehen, ist dies eine Warnung, dass möglicherweise ein Problem mit diesem Ereignis vorliegt.

Wenn Sie mit der Maus über dieses Dreieck fahren, können Sie sehen, dass es sich um die Fehler im Handler für Verstöße handelt und gemäß Punkt 4. Ja, es gibt ein Problem im Zusammenhang mit diesem Ereignis.

Prafulla Kumar Sahu
quelle