4

Chrome ブラウザーを使用してローカルで html5 キャンバス Web ページを実行しています。デバッグの目的で、1 秒あたり 60 フレームで発生するアニメーション内のオブジェクト ピクセルの位置を追跡しようとして、console.log を使用しています。しかし、問題は、Web ページを実行すると、javascript コンソールを開くまで正常に動作し、自分の場所が非常に高速に出力されて開発コンソールがフリーズするまで、ページは引き続き実行されますが、スイッチのようにデバッグすることはできません。コンソールなどの別のタブ間で、ページを閉じて再起動する必要があり、すぐに問題が再発します。

また、ビルドイン ツールを使用して javascript の CPU プロファイル コレクションを実行し、ログにどれだけのリソースが費やされているかを確認しました。実行時間のわずか 0.01% であることが判明しましたが、これは明らかに問題ではありませんが、それでもこれを行うのにごくわずかな時間を費やすだけで、コンソールは実際に UI の数値を更新するのに忙しいため、ページがフリーズします。(私はまだページをうまく操作できますが、コンソールを閉じるだけでは何もできないことを言及する必要があります)

これはChromeブラウザでは正常ですか?修正や提案はありますか?ありがとう

4

2 に答える 2

4

はい、コンソールへのスパム送信は避けます。私の経験では、驚くほど大量のデータ、たとえば数万のアイテムを含む配列をログに記録できますが、ログ関数を頻繁に呼び出すことはできません。そうしないと、再描画中に開発ツールがフリーズします。

したがって、上記を念頭に置いて、いくつかのログ呼び出しをオブジェクトまたは配列にグループ化することをお勧めします。たとえば、多くの回数を実行するループがあり、内部に5〜6個のログ呼び出しがある場合、データを配列またはウェル名キーを持つオブジェクトに追加してそれらのログ呼び出しをグループ化し、そのオブジェクトを次の場所に記録します。ループの終わり。

100ミリ秒ごとに数秒以上ログを記録する必要がある場合は、ログ呼び出しをグループ化することをお勧めします。

于 2012-07-21T13:48:20.373 に答える
3

デバッグするときは、コンソールに 1 秒あたり 60 アイテムをスパムさせない何かを実行することをお勧めします。このコードを実行しようとすると、同じ問題が発生します。 コンソールを 1 秒間に 60 回スパムすると、同じ効果があり、画面がフリーズします。コンソールに毎秒 1 回、または 2 回出力する 2 番目の変数を用意してみてください。そうすれば、変数を絞り込んでバグを修正できます。コンソールをクラッシュさせたくない場合、これがおそらく最も安全な方法です。 for (var i = 0; i < 99999;/*This will spam the console*/ i++) { console.log(i); }

これが役に立ったことを願っています!:)

于 2016-01-25T02:36:44.723 に答える