programing tip

자바 스크립트에서 배열의 최대 크기

itbloger 2020. 8. 22. 08:16
반응형

자바 스크립트에서 배열의 최대 크기


컨텍스트 : RSS 피드를 읽고 백그라운드에서 피드를 업데이트 / 확인하는 작은 사이트를 구축하고 있습니다. 표시 할 데이터를 저장할 배열과 표시된 레코드의 ID를 저장하는 배열이 있습니다.

질문 : 일이 느려지거나 느려지기 전에 배열이 Javascript에서 얼마나 많은 항목을 보유 할 수 있습니까? 배열을 정렬하지 않고 jQuery의 inArray 함수를 사용하여 비교를 수행하고 있습니다.

웹 사이트는 계속 실행되고 업데이트되며 브라우저가 자주 다시 시작 / 새로 고침되지 않을 것입니다.

배열에서 일부 레코드를 지우는 것에 대해 생각해야한다면 100 개 항목과 같은 제한 후 일부 레코드를 제거하는 가장 좋은 방법은 무엇입니까?


"느려질 때까지"까지의 최대 길이는 전적으로 대상 컴퓨터와 실제 코드에 따라 다르므로 해당 플랫폼에서 어떤 것이 허용되는지 테스트해야합니다.

그러나 ECMA-262 5th Edition 사양에 따른 배열의 최대 길이는 ToUint32 추상 연산 으로 인해 부호없는 32 비트 정수에 의해 제한 되므로 가능한 가장 긴 배열은 2 32 -1 = 4,294,967,295 = 429 억 개의 요소를 가질 수 있습니다. .


배열을 트리밍 할 필요가 없으며 단순히 순환 버퍼 (인덱스 % 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");
}

다음과 같이 길이를 테스트하고 다듬을 수 있습니다.

http://jsfiddle.net/orolo/wJDXL/

var longArray = [1, 2, 3, 4, 5, 6, 7, 8];

if (longArray.length >= 6) {
    longArray.length = 3; 
}

    alert(longArray); //1, 2, 3

수백만 개의 데이터 세트를 조작하고 그래프로 표시하는 성능 프레임 워크를 구축했으며, 그 후에도 자바 스크립트 계산 대기 시간은 수십 밀리 초였습니다. 어레이 크기 제한을 초과하는 것에 대해 걱정하지 않는 한 걱정할 것이별로 없다고 생각합니다.


매우 브라우저에 따라 다릅니다. 100 개의 항목은 많은 수처럼 들리지 않습니다. 그보다 훨씬 더 많이 갈 수있을 것으로 예상합니다. 수천명이 문제가되지 않아야합니다. 문제가 될 수있는 것은 총 메모리 소비입니다.


I have shamelessly pulled some pretty big datasets in memory, and altough it did get sluggish it took maybe 15 Mo of data upwards with pretty intense calculations on the dataset. I doubt you will run into problems with memory unless you have intense calculations on the data and many many rows. Profiling and benchmarking with different mock resultsets will be your best bet to evaluate performance.

참고URL : https://stackoverflow.com/questions/6154989/maximum-size-of-an-array-in-javascript

반응형