JSFiddle - React, Tailwind, and code Playground
JavaScript
var i, a = [];
var maxLen = 1e6;
for (i=maxLen; --i;) a.push(i); // init array 1M items
console.time('example1');
for (i = 1e2; --i;) {
a.unshift(123456);
a.pop();
if (a.length > maxLen) a.length = maxLen;
}
console.timeEnd('example1');
//--------------------------------------
// из b только читаем (мини буфер 100 элементов), в a вставляем
a = [];
b = [];
for (i=1e6; --i;) a.push(i); // init array 1M items
var overflowCount;
console.time('example2');
for (i = 1e7; --i;) {
a.push(123456);
overflowCount = a.length - maxLen;
if (overflowCount > 10000) { // удаляем лишние элементы только при серьезном переполнении
a = a.splice(0, overflowCount); // удаляем в начале overflowCount элементов
}
if (b.length === 0) { // в b закончились элементы
b = a; // переносим все в b из a
a.length = 0; // обнуляем буфер вставки
if (b.length > maxLen) b.length = maxLen;
b.reverse(); // разворачиваем буфер извлечения чтобы доставать элементы из конца
}
b.pop();
}
console.timeEnd('example2');