最近、このような警告を受けましたが、これは初めてです。
[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) も常に実行できるはずです。これを行うには、次のようなものを使用します。
setTimeout(functionToRunVerySoonButNotNow);
または
// This one is not available natively in IE, but there are polyfills available.
Promise.resolve().then(functionToRunVerySoonButNotNow);
JavaScriptの非同期性について詳しくはこちらをご覧ください。ここ。