Я реализую XmlHttpRequest и FormData для нового приложения на нашем сайте, и есть опасения, что некоторые клиенты могут попытаться загрузить десятки или, возможно, сотни тысяч документов одновременно. Прежде чем я предпринял кропотливые усилия по тестированию этих условий, я надеялся, что кто-нибудь знает, существует ли ограничение на (1) количество файлов, которые можно загрузить за один раз, и/или (2) существует ли размер файла limit в любом из современных браузеров, в которых реализованы эти функции.
Есть ли ограничение на буфер (размер или количество файлов) в современных браузерах, в которых реализованы FormData и XmlHttpRequest?
Ответы (1)
Ограничение на размер файла зависит от типа данных, используемых приложением браузера для хранения атрибута длины содержимого (обычно целое число со знаком или без знака, или около 2 ГБ/4 ГБ). Вы также можете наложить ограничение на максимальный размер файла в коде на стороне сервера, проверив длину содержимого и отклонив его загрузку, превышающую определенный порог.
Количество файлов, которые можно загрузить за один раз, зависит от максимального количества подключений, разрешенных для каждого домена. Дополнительную информацию см. в этом вопросе . Таким образом, все файлы будут загружены по n раз.
ОБНОВЛЕНИЕ:
Я провел некоторое тестирование, так как не был уверен, передает ли браузер файлы из файловой системы прямо в TCP-соединение или буферизует их в памяти.
Если я попытаюсь загрузить очень большой файл из Chrome и FF через Fiddler, использование памяти процессом браузера на моем компьютере не увеличится, в то время как процесс Fiddler увеличится до 2 ГБ, прежде чем произойдет сбой (это 32-разрядное приложение).
Итак, если на сервере вы передаете содержимое файлов прямо в свое хранилище данных, я не думаю, что вы столкнетесь с проблемами памяти ни на клиенте, ни на сервере.
Имейте в виду, что большинство веб-серверов должны быть настроены на прием очень больших запросов.
Кроме того, убедитесь, что вы используете один экземпляр XmlHttpRequest для каждого файла. Если вы загрузите все через одно соединение, длина содержимого будет равна общему размеру всех файлов.
Кроме того, имейте в виду, что загрузка больших файлов сделает ваш сервер уязвимым для DoS-атак (вы, вероятно, уже знаете об этом, но я думаю, что об этом стоит упомянуть).