Infracción de Chrome: el controlador [infracción] tomó 83 ms de tiempo de ejecución

82

Estoy tratando de implementar la funcionalidad de cierre de sesión de Facebook en mi proyecto. El inicio de sesión funciona bien. Pero me enfrento a recibir el siguiente mensaje en la consola de JavaScript con el código de cierre de sesión.

[Violación] La tarea de JavaScript de larga ejecución tomó 318 ms session.php: 51 1 sdk.js: 135

[Violación] El controlador tomó 83 ms de tiempo de ejecución (se permiten 50 ms)

Intenté buscar otros hilos similares y esas soluciones no funcionaron para mí. Intenté eliminar partes de mi código y ver qué parte está dando problemas. Está bastante claro que recibe el error debido al JS SDK de Facebook como se ve en el mensaje. También deshabilité todas mis extensiones de Chrome.

El código funciona bien en Firefox pero no en Chrome ni en Opera . ¿Existe algún método para extender este tiempo de espera? O cualquier otro método para solucionar este problema en Chrome. Aquí está mi código para cerrar la sesión.

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

Por razones obvias, eliminé el App-Id del código. Se agradece cualquier ayuda. :)

FreeKrishna
fuente
1
Es solo una advertencia, no tiene que preocuparse por ello, su código seguirá funcionando.
NoNameProvided
1
@NoNameProvided Pero la función de cierre de sesión no funciona en Chrome. No puede redirigir a la página login.php en Chrome.
FreeKrishna
3
Evento si no funciona, no está relacionado con los mensajes de infracción. Son solo informales y no tienen ningún efecto en su código.
NoNameProvided
1
@NoNameProvided Entonces, ¿cómo es que el código funciona en Firefox, pero no en Chrome? Revisé el código, es correcto. Puedes echar un vistazo tú mismo.
FreeKrishna
2
Parece ser un duplicado: stackoverflow.com/questions/41218507/…
oklas

Respuestas:

172

Las "infracciones de Chrome" no representan errores ni en Chrome ni en su propia aplicación web. En cambio, son advertencias para ayudarlo a mejorar su aplicación. En este caso, Long running JavaScripty le took 83ms of runtimeestamos alertando, probablemente haya una oportunidad para acelerar su script.

("Violación" no es la mejor terminología; se usa aquí para implicar que la secuencia de comandos "viola" una directriz predefinida, pero "advertencia" o similar sería más clara. Estos mensajes aparecieron por primera vez en Chrome a principios de 2017 y, idealmente, deberían tener una Mensaje "Más información" para explicar el significado y ofrecer acciones sugeridas al desarrollador. Es de esperar que se agreguen en el futuro).

mahemoff
fuente
30

Quizás un poco fuera de tema, solo tenga en cuenta que este tipo de mensajes también se pueden ver cuando está depurando su código con un punto de interrupción dentro de una función asíncrona setTimeoutcomo la siguiente:

[Violation] 'setTimeout' handler took 43129ms

Ese número (43129ms) depende de cuánto tiempo se detiene en su función asincrónica

Reza
fuente
2
Gracias a este comentario pude encontrar este tema y obtener una respuesta, fuera de tema o no, fue muy útil.
stramin
12

Parece que ha encontrado su solución, pero aún así será útil para otros, en esta página basada en Chrome 59.

4. Observe el triángulo rojo en la parte superior derecha del evento Animation Frame Fired. Siempre que vea un triángulo rojo, es una advertencia de que puede haber un problema relacionado con este evento.

Si se desplaza sobre estos triángulos, puede ver que esos son los errores del controlador de violaciones y según el punto 4. Sí, hay algún problema relacionado con ese evento.

Prafulla Kumar Sahu
fuente