違反 長時間実行中のJavaScriptタスクにxxミリ秒かかりました 質問する

違反 長時間実行中のJavaScriptタスクにxxミリ秒かかりました 質問する

最近、このような警告を受けましたが、これは初めてです。

[Violation] Long running JavaScript task took 234ms
[Violation] Forced reflow while executing JavaScript took 45ms

グループ プロジェクトに取り組んでいますが、これがどこから来ているのかわかりません。これはこれまで一度も起こったことがありませんでした。突然、他の誰かがプロジェクトに関与したときに現れました。この警告の原因となるファイル/関数を見つけるにはどうすればよいですか? 答えを探していますが、主に解決方法に関するソリューションを探しています。問題の原因さえ見つけられないと、解決できません。

この場合、警告は Chrome でのみ表示されます。Edge を使用してみましたが、同様の警告は表示されませんでした。また、Firefox ではまだテストしていません。

次のエラーも発生しますjquery.min.js:

[Violation] Handler took 231ms of runtime (50ms allowed)            jquery.min.js:2

ベストアンサー1

更新: Chrome 58 以降では、これらのメッセージやその他のデバッグ メッセージがデフォルトで非表示になっています。表示するには、[情報] の横にある矢印をクリックし、[詳細] を選択します。

Chrome 57 では、「違反を非表示」がデフォルトでオンになっています。これを再度オンにするには、フィルターを有効にして、「違反を非表示」ボックスのチェックを外す必要があります。

突然、プロジェクトに関わっている他の誰かが現れると

Chrome 56にアップデートした可能性が高いと思います。この警告は素晴らしい新機能だと思います。どうしても必要な場合のみオフにしてください。評価者が減点することになります。根本的な問題は他のブラウザにもあります。ただブラウザが問題があることを伝えていないだけです。Chromiumチケットはここしかし、それについては特に興味深い議論はありません。

これらのメッセージは、実際には大きな問題を引き起こすことはないため、エラーではなく警告です。フレームがドロップされたり、スムーズなエクスペリエンスが損なわれる可能性があります。

ただし、アプリケーションの品質を向上させるために、これらの問題を調査して修正する価値はあります。これを行うには、メッセージが表示される状況に注意し、パフォーマンス テストを実行して問題が発生している場所を絞り込みます。パフォーマンス テストを開始する最も簡単な方法は、次のようなコードを挿入することです。

function someMethodIThinkMightBeSlow() {
    const startTime = performance.now();

    // Do the normal stuff for this function

    const duration = performance.now() - startTime;
    console.log(`someMethodIThinkMightBeSlow took ${duration}ms`);
}

もっと上級者になりたい場合は、Chrome のプロファイラー、または次のようなベンチマークライブラリを利用する。これです

時間がかかっているコードを見つけたら (Chrome のしきい値は 50 ミリ秒)、いくつかのオプションがあります。

  1. 不要なタスクの一部または全部を削除する
  2. 同じタスクをより速く実行する方法を見つける
  3. コードを複数の非同期ステップに分割する

(1) と (2) は難しいか不可能かもしれませんが、時には本当に簡単なので最初に試すべきです。必要であれば、(3) も常に実行できるはずです。これを行うには、次のようなものを使用します。

setTimeout(functionToRunVerySoonButNotNow);

または

// This one is not available natively in IE, but there are polyfills available.
Promise.resolve().then(functionToRunVerySoonButNotNow);

JavaScriptの非同期性について詳しくはこちらをご覧ください。ここ

おすすめ記事