Javascript 中数组的最大大小

2022-08-30 04:51:32

上下文:我正在构建一个小网站,用于读取rss源,并在后台更新/检查源。我有一个数组来存储要显示的数据,另一个数组存储已显示的记录的ID。

问:在事情开始变得缓慢或迟钝之前,一个数组在Javascript中可以容纳多少个项目。我没有对数组进行排序,而是使用jQuery的inArray函数进行比较。

该网站将保持运行和更新,并且浏览器不太可能经常重新启动/刷新。

如果我应该考虑从数组中清除一些记录,那么在限制后删除某些记录(如100个项目)的最佳方法是什么。


答案 1

直到“它变得迟钝”之前的最大长度完全取决于您的目标机器和实际代码,因此您需要在该(那些)平台上进行测试,以查看可接受的内容。

但是,由于 ToUint32 抽象操作,根据 ECMA-262 第 5 版规范,数组的最大长度受无符号 32 位整数的约束,因此最长的可能数组可以有 232-1 = 4,294,967,295 = 42.9 亿个元素。


答案 2

无需修剪数组,只需将其寻址为循环缓冲区(索引 % maxlen)。这将确保它永远不会超过限制(实现循环缓冲区意味着一旦你到达终点,你就会再次绕到起点 - 不可能超过数组的结尾)。

例如:

var container = new Array ();
var maxlen = 100;
var index = 0;

// 'store' 1538 items (only the last 'maxlen' items are kept)
for (var i=0; i<1538; i++) {
   container [index++ % maxlen] = "storing" + i;
}

// get element at index 11 (you want the 11th item in the array)
eleventh = container [(index + 11) % maxlen];

// get element at index 11 (you want the 11th item in the array)
thirtyfifth = container [(index + 35) % maxlen];

// print out all 100 elements that we have left in the array, note
// that it doesn't matter if we address past 100 - circular buffer
// so we'll simply get back to the beginning if we do that.
for (i=0; i<200; i++) {
   document.write (container[(index + i) % maxlen] + "<br>\n");
}