Нажатие «неопределенного» на массиве потребляет тонны памяти? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть эта странная ошибка, которая поглощает тонны памяти и продолжает вызывать сбой моего сервера.

Каждые 30 секунд я сохраняю значение в массив:

historicalValues.push( valueToSave ) 

Когда valueToSave = 1, приложение не имеет большого увеличения памяти из этого.

Но когда valueToSave = undefined или null, приложение внезапно увеличивает 90 МБ за 2 минуты ??

Кто-нибудь знает, что может быть причиной этого?Я уверен, что нулевая переменная не занимает значительно больше памяти, чем число.Имеет ли это какое-то отношение к тому, что заставляет массив переключаться на менее эффективный тип объекта, чтобы иметь возможность поддерживать записи нескольких различных типов объектов?Мысль JavaScript не заботился о таких вещах.

1 Ответ

0 голосов
/ 26 мая 2018

Всякий раз, когда вы смешиваете типы в массиве, он увеличивает память независимо от того, undefined, null или что-то еще.Это потому, что вы сталкиваетесь с этим.

Если вам не нужны эти значения, просто отфильтруйте их перед нажатием.

Если вам действительно нужны эти значения, просто преобразуйте их в целое число.

Если у вас есть массив целых чисел, но вам также необходимо использовать undefined и null в качестве возможных значений, проверьте их перед нажатием и, если они undefined или null, нажмите целое число 0.

Поскольку undefined и null оценивают как ложное, вы можете достичь его следующим образом:

if(!value) {
   array.push(0)
} else {
   array.push(value)
}

[12,20,30,0,32,0,0,5]
...