Вопрос по javascript, xml, jquery, mozilla – Скрипт стека пространства исчерпан

3

Я работаю с большим XML-ответом от веб-службы. Когда я пытаюсь получить это с помощью URL-адреса, через некоторое время в Firebug появляется сообщение об ошибке «Квота пространства стека сценария исчерпана». Как я могу решить это?

Ваш Ответ

4   ответа
1

У меня была похожая проблема, может быть, такая же. Это может произойти, если вы попытаетесь проанализировать огромный кусок html с помощью jQuery $ (html).

В моих тестах это происходило только в Firefox 3.6.16 в Windows. Firefox 4.0.1 на Ubuntu вел себя намного лучше. Наверное, не имеет ничего общего с ОС, просто механизм сценариев в 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();  // (*)

(*) I remember that in some cases you need to add the temp node to the body, before jquery can apply any selectors. However, in this case it seemed to work just fine without that.

В FF 4.x различий не было, но это позволило избежать ошибки переполнения стека в FF 3.x.

+1 спасибо - ваш ответ привел меня к исправлению для меня.
1

Начиная с Firefox 3, доступное пространство стека сократилось с 4 МБ до ~ = 640 КБ (здесь я передаю слово из уст в уста).

Вы работаете с FF3?

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

1

Вы пытались отключить Firebug?

это с самого Firefox Andromeda
это хорошая идея, просто чтобы убедиться, что проблема в самом Firefox
4

Этоsounds например, при обработке xml происходит некоторая рекурсия, которая по сути вызывает переполнение стека (под любым именем).

Мысли:

  • work with less data
  • if you are processing the data manually, try to use less recursion? perhaps manual tail-call or queue/stack based
  • consider json - then you can offload to the script host to rehydrate the object without any extra processing

Похожие вопросы