4

サーバーから大量のデータを取得することを含む、雇用主向けの Web アプリケーションをテストしています。データは、次のように jQuery の$.map関数を使用して配列に変換する大量のサブオブジェクトを含む、 $.ajax関数を使用して JSON オブジェクトとして返されます。

data_points = $.map(result.data.LotsOfIt, function(value, ndx){
              return value;
          }); //Throws Maximum call stack size exceeded with large data set.

これは Chrome のスタック サイズ制限を使い果たしているようです。この関数を実行するたびに、Chrome はRangeError: Maximum call stack size exceededをスローします。返されるデータの量を減らすと、問題なく動作します。興味深いのは、FireFox と IE9 がより大きなデータ セットを適切に処理することですが、Chrome はこれらのブラウザーのいずれよりもスタック サイズの制限が大きいと考えていたため、両方とも同様に失敗すると予想していました。他の誰かがこの問題に遭遇しましたか? 回避策はありますか? または、このエラーを回避するために返されるデータの量を制限するようにコードを更新する必要がありますか?

4

1 に答える 1

2

さて、読んだ後、この問題は、Chromeブラウザスタックがオーバーフローする原因となった$.map実装内の再帰呼び出しに関係していると思われます。返されたJSONオブジェクトのコレクションを手動で非再帰的に繰り返すために、コードを作り直す必要がありました。コーンのコレクション全体に対して$.mapを使用するようにコードをリファクタリングした後、スタックオーバーフローの問題は発生しなくなりました。

于 2012-08-22T19:57:44.823 に答える