Javascript Chrome违规:[违规]处理程序占用了83毫秒的运行时间

Javascript Chrome违规:[违规]处理程序占用了83毫秒的运行时间,javascript,google-chrome,facebook-javascript-sdk,Javascript,Google Chrome,Facebook Javascript Sdk,我正试图在我的项目中实现Facebook的注销功能。登录工作正常。但我面临的问题是,在JavaScript控制台中获得以下带有注销代码的消息 [违规]长时间运行的JavaScript任务花费了318ms会话。php:51 1 sdk.js:135 [违规]处理程序占用了83毫秒的运行时间(允许50毫秒) 我曾尝试搜索其他类似的线程,但这些解决方案对我来说不起作用。我尝试删除部分代码,看看哪部分出现了问题。很明显,它得到的错误是由于Facebook的JSSDK,如消息中所示。我还禁用了所有的Chr

我正试图在我的项目中实现Facebook的注销功能。登录工作正常。但我面临的问题是,在JavaScript控制台中获得以下带有注销代码的消息

[违规]长时间运行的JavaScript任务花费了318ms会话。php:51 1 sdk.js:135

[违规]处理程序占用了83毫秒的运行时间(允许50毫秒)

我曾尝试搜索其他类似的线程,但这些解决方案对我来说不起作用。我尝试删除部分代码,看看哪部分出现了问题。很明显,它得到的错误是由于Facebook的JSSDK,如消息中所示。我还禁用了所有的Chrome扩展

代码在Firefox中运行良好,但不在Chrome中,也不在Opera中运行。是否有任何方法可以延长此超时持续时间?或任何其他方法来修复chrome中的此问题。这是我的注销代码

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

//默认设置
window.fbAsyninit=函数(){
FB.init({
appId:“”,
曲奇:是的,
xfbml:是的,
版本:“v2.8”
});
FB.AppEvents.logPageView();
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
window.onload=函数(){
注销();
}
函数注销(){
控制台日志(“1”);
FB.getLoginStatus(函数(响应){
如果(response.status===“已连接”){
FB.logout();
控制台日志(“2”);
window.location=“login.php”;
控制台日志(“3”);
}
否则{
控制台日志(“4”);
window.location=“login.php”;
控制台日志(“5”);
}
});
}
出于显而易见的原因,我已经从代码中删除了应用程序Id。感谢您的帮助。:)

“Chrome违规”并不代表Chrome或您自己的web应用程序中的错误。相反,它们是帮助您改进应用程序的警告。在这种情况下,
长时间运行的JavaScript
花费了83毫秒的运行时间
提醒您可能有机会加快脚本速度


(“违规”不是最好的术语;这里用它来暗示脚本“违反”了预定义的指导原则,但“警告”或类似的内容会更清楚。这些消息在2017年初首次出现在Chrome上,最好有一个“更多信息”提示详细说明其含义,并向开发人员提供建议的操作。希望将来会添加这些操作。)

看起来您已经找到了解决方案,但基于Chrome 59,它仍然会对其他人有所帮助

4.注意动画帧激发事件右上角的红色三角形。每当你看到一个红色的三角形,这是一个警告,可能有 可能是与此事件相关的问题


如果您将鼠标悬停在这些三角形上,您可以看到这些是违规处理程序错误,并符合第4点。是的,存在与该事件相关的一些问题。

可能有点离题,请注意,当您使用异步函数(如
setTimeout
中的断点调试代码时,也可以看到此类消息,如下所示:

[Violation] 'setTimeout' handler took 43129ms

这个数字(43129ms)取决于您在异步函数中停止的时间,因为没有人回答如何让它消失。。。事实证明,如果处理程序是一个带有等待方法的异步函数,它将抑制消息

function sleep (ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

async timeoutHandler() {
  await sleep(1)
  ... // heavy duty code here
}

setTimeout(timeoutHandler, 10000)

如果你经常这样做。。。最好用专用的抑制器方法代替睡眠(1)。我只是碰巧在我的UTIL中有睡眠,用于调试竞态条件。

这只是一个警告,你不必在意,你的代码仍然可以工作。@NoNameProvided,但注销功能在Chrome中不起作用。它无法重定向到Chrome.Event中的login.php页面。如果它不工作,则与违规消息无关。它们只是非正式的,对你的代码没有任何影响。@那么,为什么代码在Firefox中有效,而在Chrome中无效呢?我已经检查了代码,它是正确的。你可以自己看一看。它似乎是重复的:由于这条评论,我能够找到这个主题并得到一个答案,不管是否脱离主题,它都非常有用。我在使用webpack dev server时遇到了这个警告,但这个问题只影响了开发环境。在制作过程中一切都很好