web-dev-qa-db-fra.com

javascript - chrome violation: [Violation] Le gestionnaire a pris 83 ms d'exécution

J'essaie d'implémenter la fonctionnalité de déconnexion de Facebook dans mon projet. La connexion fonctionne très bien. Mais je suis confronté à l’obtention du message suivant dans la console JavaScript avec le code de déconnexion.

[Violation] La tâche JavaScript longue a pris 318ms de session.php: 51 1 sdk.js: 135

[Violation] Le gestionnaire a pris 83 ms d'exécution (50 ms autorisés)

J'ai essayé de rechercher d'autres thèmes similaires et ces solutions ne m'ont pas aidé. J'ai essayé de supprimer des parties de mon code et de voir quelle partie pose problème. Il est tout à fait clair que l'erreur est due au JS SDK de Facebook, comme indiqué dans le message. J'ai également désactivé toutes mes extensions Chrome.

Le code fonctionne bien dans Firefox mais pas dans Chrome ni dans Opera. Existe-t-il une méthode pour moi pour prolonger cette durée de temporisation? Ou toute autre méthode pour résoudre ce problème en chrome. Voici mon code pour la déconnexion.

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

Pour des raisons évidentes, j'ai supprimé l'identifiant d'application du code. Toute aide est appréciée. :)

45
FreeKrishna

Les "violations de Chrome" ne représentent pas des erreurs dans Chrome ou dans votre propre application Web. Ce sont plutôt des avertissements pour vous aider à améliorer votre application. Dans ce cas, Long running JavaScript et took 83ms of runtime vous avertissent qu'il existe probablement une opportunité pour accélérer votre script.

("Violation" n'est pas la meilleure terminologie; il est utilisé ici pour impliquer que le script "enfreint" une directive prédéfinie, mais "avertissement" ou similaire serait plus clair. Ces messages sont apparus pour la première fois dans Chrome au début 2017 et devrait idéalement avoir un "Plus d'infos" invite à préciser le sens et donner des actions suggérées au développeur. Espérons que celles-ci seront ajoutées à l'avenir.)

86
mahemoff

Peut-être un peu hors sujet, sachez simplement que ce type de message peut également être vu lorsque vous déboguez votre code avec un point d'arrêt dans une fonction asynchrone comme setTimeout comme ci-dessous:

[Violation] 'setTimeout' handler took 43129ms

Ce nombre (43129ms) dépend de la durée pendant laquelle vous vous arrêtez dans votre fonction asynchrone

7
Reza

Il semble que vous ayez trouvé votre solution, mais elle sera néanmoins utile aux autres, sur cette page au point

4.Notez le triangle rouge en haut à droite de l'événement Animation Frame Fired. Chaque fois que vous voyez un triangle rouge, c'est un avertissement qu'il peut y avoir un problème lié à cet événement.

Si vous survolez ce triangle, vous pouvez voir qu'il s'agit des erreurs de gestionnaire de violation et du point 4. Oui, il existe un problème lié à cet événement.

6