2013-07-24 7 views
5

I немного путать здесь. Может ли ArrayBuffer выделить для него новую область памяти? Если да, то каков был бы максимальный размер Blob, чтобы надеть его?У ArrayBuffers максимальная длина?

+0

Я не уверен, что понимаю, почему вы спрашиваете об этом в первую очередь. Вы нашли проблему? Что касается ограничения размера Blob, я не смог найти его, поэтому я думаю, что это может быть память компьютера клиента и лимит загрузки сервера. –

+0

Да, при базовом тесте попытался выделить в Firefox большой буфер, например 512 МБ (я тестировал лимиты), и он просто разбился. – cavila

+0

Также попытался выделить что-то подобное в переменной часов в chrome inspector и chrome crashing тоже сейчас, когда я открываю панель инспектора. Ожидая, чтобы браузеры запускали какую-то ошибку, например OUT_OF_MEMORY. Меня интересует использование файловых читателей для обработки больших файлов на клиенте. В настоящее время я мог избежать сбоев, нарезая чтение больших файлов (огромных изображений) на более мелкие буферы. – cavila

ответ

4

Это зависит только от вашей системы и не существует предела.

По the specification:

Если запрашиваемое количество байт не может быть выделено исключением приподнят.

+0

Документ, на который ссылается ваша ссылка, не означает, что вы цитируете слова, которые вы цитируете. Вы имеете в виду [«Если невозможно создать такой блок данных, выбросите исключение RangeError».] (Https://www.ecma-international.org/ecma-262/6.0/#sec-createbytedatablock)? – Daerdemandt

+0

@Daerdemandt Моя ссылка указывает на «последнюю» версию спецификаций, поэтому я предполагаю, что она просто эволюционировала, но да, предложение, которое вы цитируете, похоже на новый переформулированный эквивалент тому, который был в моем ответе. –

1

Я также задавал себе тот же вопрос. Похоже, что буфер ограничен доступной системной памятью и возможностью использования GC основного процессора JavaScript для обработки больших объемов памяти. Вы можете легко протестировать его для своей платформы, создав большие буферы в консоли вашего браузера, а также в процессе мониторинга браузера и общей памяти.

Мне просто удалось создать буферы размером более 512 МБ на Chrome 37. Однако у меня есть 4 ГБ системной памяти, поэтому это может привести к сбою после большего выделения. Я не заинтересован в том, чтобы найти точку прерывания, потому что я в порядке с распределениями до 100 МБ, но вы, очевидно, можете легко проверить его сами.

1

что будет безопасным максимальный размер Blob положить на него

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

Однако, если вы используете какой-то индексированный доступ, индексы не должны быть больше Number.MAX_SAFE_INTEGER, потому что интересные ошибки произойдут иначе.

К счастью, 2^53-1 байт составляет около 8 петабайт, поэтому вы не беспокойтесь, если не делаете что-то действительно странное.

Смежные вопросы