V8 (узел движка JavaScript построен на) до тех пор, пока very не получил жесткий предел размера кучи около 1,9 ГБ .
Узел v0.10 застрял на старой версии V8 (3.14) из-за нарушения изменений API V8 вокруг собственных аддонов. Узел 0.12 будет обновлен до новейшего V8 (3.26), который сломает многие родные модули, но откроет дверь для ограничения уровня кучи 1.9 ГБ.
Итак, поскольку он стоит, процесс с одним узлом может хранить не более 1,9 ГБ кода JavaScript, объектов, строк и т. д. в сочетании . Это означает, что максимальная длина строки меньше 1,9 ГБ.
Вы можете [] обойти это, используя Buffer
s, которые хранят данные вне кучи V8 (но все же в куче вашего процесса). 64-битная сборка узла может в значительной степени заполнить всю вашу оперативную память, если у вас никогда не будет более 1,9 ГБ данных в переменных JavaScript.
Все, что сказал, вы никогда не должны приближаться этот предел. Когда вы работаете с этим большим количеством данных, вы должны обрабатывать его как поток. У вас никогда не должно быть больше нескольких мегабайт (максимум) в памяти за один раз. Хорошей новостью является узел, особенно хорошо подходящий для работы с потоковыми данными.
Вы должны задать себе несколько вопросов:
Вопрос, который вы опубликовали, на самом деле довольно неопределенен в отношении того, что вы на самом деле пытаетесь выполнить. Для получения более конкретных рекомендаций обновите свой вопрос с дополнительной информацией.
Если вы ожидаете, что данные никогда не будут такими большими, просто наведите разумный лимит в 10 МБ или что-то на вход, буферизуйте все это и используйте JSON.stringify
.
Если вы планируете больше обрабатывать данные, вам нужно передать поток прямо на диск. Посмотрите на потоки преобразования , если вам нужно обработать / изменить данные перед тем, как перейти на диск. Например, существуют модули, которые связаны с потоковой передачей JSON .