1

私が取り組んでいるプロジェクトには、backbone.js で完全に作成された「計画」画面が含まれています (アプリの他のページはそうではありません)。

私の問題は、時々、クロムがフリーズし、Web ビューがインタラクションに応答しなくなることです。クロム自体を終了できる場合もありますが、通常はコントロールも応答しません。

これはjsコードに関連していると確信しています。スクリプトに時間がかかりすぎたり、無期限にループしたりすると、Chrome がこれを検出してスクリプトを中断できるように思えます。しかし、そうではないので、メモリに残るjsオブジェクトが多すぎるのではないかと考えています。

原因が何であれ、ここで役立つ chrome 開発ツールを知りたいです。私は js の初心者ではありませんが、ブレークポイントの設定と呼び出しは別console.logとして、JS アプリをデバッグする方法がわかりません。開発ツールの方が適している場合、別のブラウザーを使用することに反対しているわけではありません。

お時間をありがとうございました!

FTR : これは、mongodb と Backbone.js 0.9.2 を使用する Rails 3.2.8 アプリです。jsコードはcoffeescriptで書かれています。この問題は、Macbook Air 2012 を実行しているマウンテン ライオンと、Windows 7 で実行しているクライアント マシンで発生しました。この問題は、少なくとも chrome 22 と 23 で発生しました。

4

4 に答える 4

1

Javascript CPU プロファイラーを使用して、フリーズの原因と思われる関数のグループを見つけることができました。

JavaScriptコードのデバッグに関するアドバイス/リソースを引き続き受け入れます。

于 2012-11-13T10:17:57.490 に答える
0

ループ内にconsole.logを作成し、すべてのChromeバージョンで同じポイントがフリーズするかどうかを確認します。制限があります。ブラウザのJavascriptスタックサイズの制限を参照してください。

たぶんコードを追加しますか?特にイベントハンドラーでは、メモリリークが発生する可能性があるためです。

于 2012-11-13T08:53:32.230 に答える
0

私がやりたいことは、console.log で手を汚すための長くて疲れたアプローチです。 - - この場合。あなたの場合、ヒントのTHX(CPUプロファイラーで違反者を見つける、次回はそれを試します)、違反者は「コールバック」自体のいくつかの関数である可能性があると思います..おそらく何らかの方法でイベント処理/バブリング/コールバックの組み合わせ。

通常、コールバックスタックが「壊れている」ため、エンドレスループが認識されません。したがって、ブラウザエラーがスローされることはありません。

運が良ければ、コンソールを強制終了するほどブラウザを強制終了することはありません。時々、コンソールが強制終了され(サイレントのまま)、coffeescriptファイルがデバッガーに読み込まれませんでした(JS-MVCのようにJIT-coffee-to-js-translatorを使用します)...ページがフリーズまたは何もしていない...

したがって、実際に運が良く、デバッガーが console.logs を出力した場合、不要なループがどこに隠れているかを推測できます。出力ステートメントの繰り返される順序を見るだけです。

于 2012-11-15T02:26:40.553 に答える
0

もちろん、ブレークポイントを正しく設定できることは知っていますか? 条件付きブレークポイントも

私は現在、同様のループを解くのに少し苦労しています-緊急の場合alert()、コード内のいくつかの呼び出しは少なくともループを遅くするでしょう

または、いくつかの待機呼び出し(悪い考え)

ループの実行速度が速すぎて、コンソール ログが失われました。

于 2013-05-20T04:20:57.780 に答える