Предел памяти JavaScript
Есть ли максимальный объем данных, которые может хранить приложение JavaScript?
Я предполагаю, что это обрабатывается браузером, и у каждого есть свои ограничения?
Если предел отсутствует, будет ли создан файл страницы? Если да, то неужели это небезопасно?
Ответы
Ответ 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.
Смотрите также эти сообщения:
-
Максимальный размер массива в Javascript, который предполагает, что вы можете хранить до 2 32 -1 = 4 294 967 295 = 4,29 млрд элементов.
-
Максимальное количество аргументов, которое может принять функция JavaScript
На веб-сайте библиотеки отображения астрономических изображений JS9 есть дополнительные сведения: работа с ограничениями памяти.
(Я пытался найти хороший ответ, и приведенный здесь ответ "нет верхнего предела" был просто глупым для меня. Я не могу столкнуться с производственной проблемой для многомиллионного проекта и сказать руководству: "Ну, Я предположил, что верхнего предела нет, и все будет в порядке. "Попробуйте проверить концепцию, например, загрузить множество элементов управления со списком в выбранную среду JavaScript UI и т.д. Вы можете обнаружить, что ваша среда имеет некоторое снижение производительности. )
Вот некоторые компоненты, которые я нашел очень хорошо масштабируемыми как по производительности процессора, так и по производительности памяти:
- Редактор Microsoft Monaco
- Это используется несколькими коммерческими проектами:
- Почтальон, от v7.1.1-canary08
- Кодекс VS
Вот несколько примеров платформ с известным снижением производительности:
- Угловой: Плохой подход к обнаружению изменений.
- Для каждого асинхронного события сравните каждую привязку (привязку Model-Dom) к ее старому значению, чтобы решить, следует ли выполнить повторную визуализацию.
- NG1:> 2500 зрителей, производительность останавливается
- NG2: та же проблема остается, но у вас есть долгий утомительный обходной путь: переключитесь на неизменяемые и распространите ChangeDetectionStrategy.onПроведите по всему приложению, чтобы отключить проблемную стратегию по умолчанию
- реагировать
- Опять же, неизменные коллекции объектов JS пока только масштабируются.
- Приложение create-реагировать на внутреннее использование Immutable.JS и Immutable.JS может создать только около 500 тыс. неизменных коллекций, прежде чем оно умрет.
Вот еще несколько вещей, о которых стоит подумать:
- Используйте 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]()