質問

Webサービスからの大きなXML応答を処理しています。 URLを使用してそれを取得しようとすると、しばらくしてFirebugで「スクリプトスタックスペースのクォータが使い果たされました」というエラーが表示されます。 どうすれば解決できますか?

役に立ちましたか?

解決

xmlを処理するときに再帰が行われているように聞こえます。これは(任意の名前の)スタックオーバーフローを本質的に引き起こしています。

考え:

  • 少ないデータで作業する
  • データを手動で処理している場合、再帰の使用を減らしますか?おそらく手動のテールコールまたはキュー/スタックベース
  • jsonを検討する-スクリプトホストにオフロードして、余分な処理を行わずにオブジェクトを復元することができます

他のヒント

Firebugを無効にしようとしましたか?

Firefox 3の時点で、使用可能なスタック領域が4MBから〜= 640KBに減少しました(ここで口コミを伝えています)。

FF3を実行していますか?

https://bugzilla.mozilla.org/show_bug.cgi?id=420874

同じような問題がありました。 これは、jQuery $(html)を使用してhtmlの巨大なチャンクを解析しようとした場合に発生する可能性があります。

私のテストでは、これはWindows上のFirefox 3.6.16でのみ発生しました。 Ubuntu上のFirefox 4.0.1の動作は改善されました。おそらくOSとは関係ありません。4.xのスクリプトエンジンだけがはるかに優れています。

解決策: の代わりに

var $divRoot = $(html);

やった

var $temp = $('<div style="display:none;">');  // .appendTo($('body'));  // (*)
$temp.html(html);  // using the client's html parsing
var $divRoot = $('> div', $temp);  // or .children() or whatever
// $temp.remove();  // (*)

(*) jqueryがセレクターを適用する前に、場合によっては、一時ノードを本文に追加する必要があることを覚えています。ただし、この場合、それなしでも正常に機能するように見えました。

FF 4.xではまったく違いはありませんでしたが、FF 3.xではスタックスペースオーバーフローエラーを回避できました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top