В 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 и т. Д. Вы можете обнаружить, что у вашей платформы есть некоторые снижение производительности .)
Вот некоторые компоненты, которые я нашел очень хорошо масштабируемыми как по производительности процессора, так и по производительности памяти:
- Редактор Microsoft Monaco
- Используется несколькими коммерческими проектами:
- Почтальон, начиная с v7.1.1-canary08
- VS Код
Вот несколько примеров платформ с известным снижением производительности:
- Angular: Плохой подход к обнаружению изменений.
- Для каждого асинхронного события сравните каждую из привязок (привязка Model-Dom) со старым значением, чтобы решить, следует ли повторно визуализировать.
- NG1:> 2500 зрителей, производительность останавливается
- NG2: та же проблема остается, но у вас есть долгий утомительный обходной путь: переключитесь на неизменяемый файл и распространите ChangeDetectionStrategy.onПроведите по всему приложению, чтобы отключить проблемную стратегию по умолчанию
- Реагировать
- Опять же, неизменные коллекции объектов JS пока только масштабируются.
- create-реагировать-приложение внутренне использует Immutable.JS и Immutable.JS может только создать около 500k неизменяемых коллекций, прежде чем оно умрет.
Вот еще несколько вещей, о которых стоит подумать:
- Используйте array.slice для манипулирования массивами , чтобы минимизировать дополнительные выделения массива; array.slice изменит массив на месте, что уменьшит сборку мусора и общий размер кучи.