Chrome違反:[違反]ハンドラーの実行時間が83ミリ秒かかりました


87

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

[違反]長時間実行されるJavaScriptタスクには318ミリ秒かかりましたsession.php:51 1 sdk.js:135

[違反]ハンドラーは83msのランタイムを要しました(50msが許可されています)

他の同様のスレッドを検索しようとしましたが、それらの解決策はうまくいきませんでした。コードの一部を削除して、どの部分で問題が発生しているかを確認しました。メッセージに見られるように、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>

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


1
これは単なる警告であり、気にする必要はありません。コードは引き続き機能します。
NoNameProvided 2017

1
@NoNameProvidedただし、Chromeではログアウト機能が機能しません。Chromeのlogin.phpページにリダイレクトできません。
FreeKrishna 2017

3
それが機能しない場合のイベントは、違反メッセージとは関係ありません。これらは非公式であり、コードには影響しません。
NoNameProvided 2017

1
@NoNameProvidedでは、なぜコードはFirefoxで機能するのに、Chromeでは機能しないのでしょうか。コードを確認しました。正しいです。あなたは自分で見ることができます。
FreeKrishna 2017

2
:重複しているようだstackoverflow.com/questions/41218507/...
oklas

回答:


184

「Chrome違反」は、Chromeまたは独自のウェブアプリのエラーを表すものではありません。代わりに、アプリの改善に役立つ警告です。この場合、Long running JavaScriptそしてtook 83ms of runtimeあなたに警告しているのは、おそらくあなたのスクリプトをスピードアップする機会があるでしょう。

(「違反」は最良の用語ではありません。ここでは、スクリプトが事前定義されたガイドラインに「違反」していることを示すために使用されていますが、「警告」などの方が明確です。これらのメッセージは2017年の初めにChromeで最初に表示され、理想的には「詳細情報」プロンプトで、意味を詳しく説明し、開発者に提案されたアクションを提供します。将来、それらが追加されることを願っています。)


30

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

[Violation] 'setTimeout' handler took 43129ms

その数(43129ms)は、非同期関数で停止する時間によって異なります


2
このコメントのおかげで、私はこのトピックを見つけて、トピックから外れているかどうかにかかわらず、答えを得ることができました。それは非常に役に立ちました。
stramin

12

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.