2011-01-20 2 views
2

예를 들어, dom의 한계를 아는 사람이 있는지 궁금합니다.DOM js 메모리 용량이란 무엇입니까?

내가 JSON 개체

var json = {}

을 가지고이 json 객체 배열, 다른 개체, 또는 이벤트 일반 텍스트를 포함하여, 내부에 자신의 객체가 있다면.

한계가있는 경우 json 수의 자식 개체 수는 얼마이며 개체의 크기가 동적으로 증가하면 오류가 표시됩니까? 더 이상 처리 할 메모리가 없으므로 ...

+0

제한이 있다면 실제로 필요한 것보다 훨씬 클 것입니다. – qwertymk

답변

6

열심히 제한이 믿지 않는,하지만 난 무슨 일이 일어날 지 궁금했다, 그래서 나는 조금 특별 테스트 스크립트를 작성 :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <script language="javascript"> 
      window.onload = function() { 
       var data = []; 
       var i = 0; 

       var addData = function() { 
        var arr = []; 
        i++; 

        for(var j=0; j<10000; j++) { 
         arr.push({ 
          id: i + j, 
          name: "item" + j, 
          number: i * j, 
          date: new Date(), 
          email: "long_email" + i + "@domain" + j + ".com" 
         }); 
        } 

        data.push(arr); 
        document.getElementById("result").innerHTML = i.toString(); 
        window.setTimeout(addData, 1); 
       }; 

       addData(); 
      }; 
     </script> 
    </head> 
    <body> 
     <div id="result"></div> 
    </body> 
</html> 

스크립트는 거대한 배열을 구축합니다. 반복 할 때마다 10,000 개의 객체로 구성된 더 작은 배열이 만들어지고 기본 배열로 푸시됩니다. 각 개체에는 2 개의 숫자, 2 개의 문자열 및 1 개의 날짜가 포함됩니다. 나는 반복 횟수를 계산한다.

나는 하나의 컴퓨터 만 사용할 수있는 IE7과 IE8을 제외하고이 스크립트를 두 대의 컴퓨터에서 테스트했습니다. 첫 번째 컴퓨터는 2GB RAM이 장착 된 Windows XP를 실행하고 두 번째 컴퓨터는 4GB RAM이 장착 된 Windows 7을 실행합니다.

  • IE 7 :

    나는 다음과 같은 결과를 얻었다는 동결하기 전에 카운터는 52에서 멈췄다. 브라우저가 완전히 응답하지 않게되었습니다. 경고가 표시되지 않았습니다. 나는 그 과정을 죽여야 만했다.
  • IE 8 : 카운터는 최대 108 개까지갔습니다. 브라우저가 완전히 응답하지 않게되었습니다. 경고가 표시되지 않았습니다. 나는 그 과정을 죽여야 만했다.
  • 파이어 폭스 3.6 : 첫 번째 컴퓨터에서는 289, 두 번째 컴퓨터에서는 580으로 카운터가 이동했습니다. 이 순간에 경고가 나타났습니다 (이 페이지의 스크립트가 사용 중이거나 응답하지 않을 수 있습니다 이제 스크립트를 중지하거나 스크립트가 완료되는지 계속 확인할 수 있습니다) 브라우저가 매우 반응이 없으면 대본을 중단했습니다.
  • Opera 11 : 카운터는 첫 번째 컴퓨터에서는 235 개로, 두 번째 컴퓨터에서는 232 개가되었습니다. 브라우저는 조금 뒤떨어져있었습니다. 경고가 표시되지 않았습니다.
  • 크롬 8 : 카운터가 두 컴퓨터에서 모두 327이되어 하드 한도에 도달 한 것처럼 보입니다. 브라우저는 여전히 매우 반응적이었습니다. 경고가 표시되지 않았습니다.
+1

멋진 형사 작업 Watson. –

+0

좋은 하나, 잘 내 스크립트는 아약스를 사용하여 증가 난 그냥 아주 큰 페이지를했고 이드는 내가 미래의 프로젝트에 대해 알 필요가 있다고 생각 생각 :) – Val

0

JS, DOM 또는 JSON의 표준에 따라이 경우 제한이 없습니다.

한계가있는 경우 구현에 따라 크게 달라 지므로 브라우저 (또는 js 엔진) 설명서에서 확인해야합니다. 그리고 내가 아는 유일한 한계는 V8 (크롬의 JS 엔진)의 힙을위한 1.8Gb입니다.