0

私は、ストレートな JavaScript で記述したアプリケーションを持っています (jQuery などはありません)。画像をアップロードし、クリックすると、画像の支配的な色を取得し、画像内でクリックしたばかりの色を選択し、これに基づいて配色を生成します。

その一部をここに実装しました: http://cassidoo.co/assets/colordetect/index.html (このバージョンには色検出部分のみがあり、カラー ピッカー/配色部分はありません)

今、私はいくつかの問題を理解しようとしています。アプリケーションは通常動作します。機能しないのは、ブラウザがクラッシュしたときだけです。ここのスレッドを見ました:

「ブラウザをクラッシュさせる」可能性のある JavaScript をテストするにはどうすればよいですか?

そして、デバッガーとすべてを使用してきましたが、ブラウザーがクラッシュしたときに実際にエラーが発生することはありません。突然応答しなくなり、しばらくすると「Oh, Snap」画面か何かが表示されます。

どうすればこれをデバッグできますか? 私のコードの何がおかしくなっている可能性がありますか (閉じていない無限ループ、正常ではないキャンバスの何かなど)? 50~60%の確率でしか起きないのはなぜですか?キャッシュの問題ですか?

4

5 に答える 5

1

おそらく無限ループです。100回のループ(または何でも)の後にアラートまたはコンソールログをスローし、実行を停止する条件をループに入れることで、それをテストできます。

トリッキーな正規表現はありますか? 壊滅的な後戻りもあなたを失望させる可能性があります。http://www.regular-expressions.info/catastrophic.html

また、前述のように、再帰が多すぎると、再帰も発生します。自分自身を繰り返し呼び出す関数はありますか?

于 2013-08-08T22:35:48.167 に答える
1

あなたはいつでも次のようなことをすることができます:

var foo = "bar";
while (1) {
    foo = foo += "bar"; // adds until memory is full, then crashes (womp womp)
}
于 2014-09-09T18:42:28.053 に答える
0

ブラウザのクラッシュを引き起こす可能性のあるもののいくつかを次に示しますが、それらが問題の原因であるかどうかはわかりません.

  1. 何でも while(1) (無限ループ) - ブラウザはこれらを処理できないようです
  2. データが多すぎる変数 (メモリ不足 - 大きな画像を保存する場合に妥当)
  3. リロードの試行回数が多すぎる (リロードの無限ループなど)
  4. SetInterval から SetInterval へ SetInterval など... (これは推測よりもばかげています)

おそらく無限ループか、奇妙な間です。私はあなたがそれを修正することを願っています!

于 2021-09-26T03:57:40.720 に答える