ограничение браузера запросов ajax - PullRequest
9 голосов
/ 22 мая 2009

Более общие вопросы для начала. Существует ли ограничение на размер ответа на ajax-запрос, если это JSON-запрос?

Я передаю большие объемы данных через запрос JSON и запускаю сообщение «Квота стека сценария исчерпана» в FF3. Теперь в FF2 квота была 4 МБ, но в FF3 это 640 КБ. Мне интересно, если это как-то специфично для JSON. У обычных запросов ajax есть ограничение размера ответа? Тот, который может быть навязан браузером? Если не-JSON-запрос не имеет таких же проблем с квотой стека скриптов, как я могу классифицировать возвращаемые данные? Возможно, XML ... Я не уверен, буду ли я в пределах спецификации w3c с моими данными, чтобы сделать это.

Ответы [ 5 ]

3 голосов
/ 22 мая 2009

iirc, это была ошибка в FF3 в прошлом году, но я думаю (да, проверил здесь ), это исправлено. Глядя вниз на комментарии, есть следующее примечание:

Примечание: этот тест зависит от архитектура и доступная память. На машина x86_64 с 2G и 64 бит построить, он потерпит неудачу с InternalError: пространство стека скрипта однако квота исчерпана на x86_64 с 4G и 64-битной сборкой пройти.

В комментариях также говорится, что это чисто проблема JS, что означает, что, хотя формат данных не будет иметь никакого значения, очень большие куски JSON могут разбить стек JS, а строки XML - нет. Я думаю, тебе просто нужно попробовать.

OTOH, он помечен как исправленный, поэтому возникает вопрос, что вы тоже пользуетесь последней версией FF.

2 голосов
/ 22 мая 2009

Я думаю, что Аннаката прав.

В тексте сообщения об ошибке также указывается, что проблема возникает из-за глубины структуры json, а не ее размера в КБ.

Это означает, что когда вы проверяете свой json, движок JavaScript использует стек во время синтаксического анализа json. Этот стек достигает своего максимального предела из-за глубины (количества вложенных элементов) в вашей структуре JSON.

Возможно, вы захотите проверить, возможна ли более плоская структура для ваших требований.

2 голосов
/ 22 мая 2009

Я подозреваю, что ограничения отличаются, если вы отправляете или получаете данные, поэтому я собираюсь предположить, что это касается отправки данных клиенту. JSON - это просто тип данных. Подозреваю, что вы действительно делаете GET-запрос для сценария JavaScript, который должен быть ограничен разумным размером. В вики для JSON также говорится, что используйте метод XMLHTTPRequest, который может превысить ваш лимит, но вам все равно потребуется прокси-сервер, чтобы избежать ограничений междоменных сценариев и использовать более разумный тип MIME, такой как html, xml, binary и т. Д. Если вы помещаете какие-либо изображения в JSON, помните, что они могут быть ссылками, так как с этими запросами нет проблем между доменами.

Проверьте также, что количество запросов не вызывает проблем, у браузеров тоже есть ограничения. Иногда до 2.

1 голос
/ 22 мая 2009

Я не встретил никакого ощутимого ограничения, но ваша интерактивность пользователя разбивает большие данные на несколько вызовов Передача больших таблиц через ajax занимает много времени, особенно если пользователь работает с IE. Большие данные + Ajax + IE = IE сбой.

1 голос
/ 22 мая 2009

Как правило, я стараюсь, чтобы мои данные AJAX были небольшими. Если мне нужно будет передать большое количество данных, я получу их несколькими вызовами. Поэтому, если я загружаю таблицу, у меня будет один метод, который скажет мне, сколько записей будет возвращено, и другой метод, чтобы вернуть мне записи в группах из # (обычно для меня 20).

Хорошая часть этого заключается в том, что я могу загружать страницу по мере извлечения данных, и пользователь не ждет одной большой полезной нагрузки.

Кроме того, было бы лучше использовать JSON, а не XML. JSON обычно имеет меньшую полезную нагрузку, чем XML, и многие тесты показывают, что браузеру легче загрузить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...