Подтвердить что ты не робот

Предел памяти JavaScript

Есть ли максимальный объем данных, которые может хранить приложение JavaScript?

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

Если предел отсутствует, будет ли создан файл страницы? Если да, то неужели это небезопасно?

4b9b3361

Ответ 1

AFAIK, нет верхнего предела, ваш script может в основном использовать память до тех пор, пока система не исчерпает память (включая swap). Никакой верхний предел не означает, что вы должны съесть все это, пользователям это может не понравиться.

Ответ 2

В Chrome и Chromium OS ограничение памяти определяется браузером, и вы можете проверить ограничение с помощью следующей команды в командной строке инструментов разработчика, нажав F12:

> window.performance.memory.jsHeapSizeLimit
1090519040

На моей ОС Windows 10 это около 1 ГБ.

В Chrom (e/ium) вы можете обойти ограничение размера кучи, выделив собственные массивы:

var target = []
while (true) {
    target.push(new Uint8Array(1024 * 1024)); // 1Meg native arrays
}

Это приводит к сбою вкладки около 2 ГБ, что происходит очень быстро. После этого Chrom (e/ium) выходит из строя, и повторение теста невозможно без перезапуска браузера.

Я также рекомендую прочитать блог TrackJS о мониторинге памяти JavaScript, прежде чем углубляться в сорняки, пытаясь диагностировать или измерить что-либо, связанное с браузером.

Вы также можете найти в comp.lang.javascript лимит памяти javascript.

Смотрите также эти сообщения:

  1. Максимальный размер массива в Javascript, который предполагает, что вы можете хранить до 2 32 -1 = 4 294 967 295 = 4,29 млрд элементов.

  2. Максимальное количество аргументов, которое может принять функция JavaScript

На веб-сайте библиотеки отображения астрономических изображений JS9 есть дополнительные сведения: работа с ограничениями памяти.

(Я пытался найти хороший ответ, и приведенный здесь ответ "нет верхнего предела" был просто глупым для меня. Я не могу столкнуться с производственной проблемой для многомиллионного проекта и сказать руководству: "Ну, Я предположил, что верхнего предела нет, и все будет в порядке. "Попробуйте проверить концепцию, например, загрузить множество элементов управления со списком в выбранную среду JavaScript UI и т.д. Вы можете обнаружить, что ваша среда имеет некоторое снижение производительности. )

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

  1. Редактор Microsoft Monaco
    • Это используется несколькими коммерческими проектами:
      1. Почтальон, от v7.1.1-canary08
      2. Кодекс VS

Вот несколько примеров платформ с известным снижением производительности:

  1. Угловой: Плохой подход к обнаружению изменений.
    • Для каждого асинхронного события сравните каждую привязку (привязку Model-Dom) к ее старому значению, чтобы решить, следует ли выполнить повторную визуализацию.
      1. NG1:> 2500 зрителей, производительность останавливается
      2. NG2: та же проблема остается, но у вас есть долгий утомительный обходной путь: переключитесь на неизменяемые и распространите ChangeDetectionStrategy.onПроведите по всему приложению, чтобы отключить проблемную стратегию по умолчанию
  2. реагировать
    • Опять же, неизменные коллекции объектов JS пока только масштабируются.
      1. Приложение create-реагировать на внутреннее использование Immutable.JS и Immutable.JS может создать только около 500 тыс. неизменных коллекций, прежде чем оно умрет.

Вот еще несколько вещей, о которых стоит подумать:

  1. Используйте array.slice для манипулирования массивами, чтобы минимизировать дополнительные выделения массива; array.slice изменит массив на месте, что уменьшит сборку мусора и общий размер кучи.

Ответ 3

Ограничений по памяти для программы Javascript нет. Ваш script может запускать всю оперативную память на вашем компьютере. Однако не рекомендуется использовать всю память на компьютере пользователя. Если вы имеете дело с большим количеством данных, я бы предложил вам проверить кеширование.

Ответ 4

Firefox поддерживает опцию " javascript.options.mem.max", и если вы будете искать ее, вы сможете найти дискуссию о разумных значениях, которые люди нашли работоспособными.

Не уверен, сколько людей может быть обеспокоено тем, что происходит там, и устанавливая его, но говоря сам за себя, я установил его на 128000 (это 128 М).

Ответ 5

Я думаю, что ограничение памяти от браузера. Мы можем использовать DevTools, чтобы понять это. Как и в Chrome, нажмите F12 и введите window.performance.memory, чтобы увидеть информацию о памяти.

 window.performance.memory

enter image description here