Привет, ребята! У меня есть задача по оптимизации JavaScript-кода. Нужно улучшить функцию, которая обрабатывает массив данных каждые 10 секунд. Вот что она делает:
Убирает первый элемент из массива
Добавляет новое значение в конец
Создает новый массив пар [индекс, значение]
Выводит результат в консоль
Проблема в том, что эта функция может вызывать утечки памяти при частом использовании. Как ее можно переписать, чтобы избежать этого? Вот примерный код:
let dataArray = [10, 15, 20, 25, 30];
function updateData(newValue) {
dataArray.shift();
dataArray.push(newValue);
let result = dataArray.map((value, index) => [index, value]);
console.log(result);
}
Буду благодарен за любые идеи по оптимизации! Может, есть способ избежать создания нового массива каждый раз?
ну вот что я думаю. не обязательно создавать новый массив каждый раз, можно обновлять существующий. попробуй что-то типа:
let result = [[0,0], [1,0], [2,0], [3,0], [4,0]];
function updateData(newValue) {
dataArray.shift();
dataArray.push(newValue);
for (let i = 0; i < dataArray.length; i++) {
result[i][1] = dataArray[i];
}
console.log(result);
}
так ты переиспользуешь один и тот же массив result, просто обновляя значения. должно меньше нагружать память. еще можно подумать над использованием WeakMap если нужно хранить много данных. но для небольших массивов и такой вариант сойдет
Могу предложить вариант с циклическим буфером. Создаем массив фиксированного размера и индекс, который будет указывать на текущую позицию:
const bufferSize = 5;
let buffer = new Array(bufferSize).fill(0);
let index = 0;
function updateData(newValue) {
buffer[index] = newValue;
index = (index + 1) % bufferSize;
console.log(buffer.map((v, i) => [(i + index) % bufferSize, v]));
}
Так избегаем создания новых массивов и сдвигов. Память используется эффективнее. Производительность должна быть выше, особенно на больших объемах данных.