web-dev-qa-db-ja.com

javascript-chrome違反:[違反]ハンドラーの実行に83ミリ秒かかりました

Facebookのログアウト機能をプロジェクトに実装しようとしています。ログインは正常に機能します。しかし、ログアウトコードでJavaScriptコンソールに次のメッセージが表示されることに直面しています。

[違反]長時間実行されるJavaScriptタスクには318msのセッションが必要です。session.php:51 1 sdk.js:135

[違反]ハンドラーの実行に83ミリ秒かかりました(50ミリ秒許可)

他の同様のスレッドを検索しようとしましたが、それらの解決策はうまくいきませんでした。コードの一部を削除してみて、どの部分が問題を引き起こしているかを確認しました。メッセージに示されているように、FacebookのJS SDKが原因でエラーが発生していることは明らかです。また、すべてのChrome拡張機能を無効にしました。

コードはFirefoxで正常に動作しますですがChromeやOperaでは動作しませんです。このタイムアウト時間を延長する方法はありますか?または、クロムでこの問題を修正する他の方法。これがログアウト用の私のコードです。

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

明らかな理由により、コードからApp-Idを削除しました。どんな助けも大歓迎です。 :)

45
FreeKrishna

「Chrome違反」は、Chromeまたは独自のWebアプリのエラーを表すものではありません。代わりに、アプリの改善に役立つ警告です。この場合、Long running JavaScriptおよびtook 83ms of runtimeは、おそらくスクリプトを高速化する機会があることを警告しています。

(「違反」は最良の用語ではありません。ここではスクリプトが定義済みのガイドラインに「違反する」ことを意味しますが、「警告」などはより明確になります。これらのメッセージは2017年初頭にChrome理想的には、意味について詳しく説明し、提案されたアクションを開発者に提供するための「詳細情報」プロンプトを用意する必要があります。

86
mahemoff

おそらく少し外れたトピックですが、以下のようなsetTimeoutのような非同期関数内のブレークポイントを使用してコードをデバッグしているときにも、この種のメッセージが表示されることがあります。

[Violation] 'setTimeout' handler took 43129ms

その数(43129ms)は、非同期関数で停止する時間に依存します

7
Reza

あなたはあなたの解決策を見つけたようですが、それでも このページ で他の人に役立つでしょう

4. Animation Frame Firedイベントの右上にある赤い三角形に注意してください。赤い三角形が表示される場合は常に、このイベントに関連する問題がある可能性があるという警告です。

これらの三角形にカーソルを合わせると、それらが違反ハンドラーエラーであることがわかります。ポイント4に従って、はい。そのイベントに関連する問題があります。

6