3

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

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

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

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

    от
  • это с самого Firefox

    от Andromeda
  • 1

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

  • 1

    Начиная с Firefox 3

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

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

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

  • 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

  • 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.