[javascript] localStorage 값의 최대 크기는 얼마입니까?

사람 localStorage(현재) 값만 같은 문자열을 지원하며, 오브젝트들이 저장되기 전에도 캐릭터 라인 (JSON 문자열로 저장) 할 필요가 그렇게하기 위해, 값의 길이에 대하여 정해진 제한이있다.

모든 브라우저에 적용되는 정의가 있는지 아는 사람이 있습니까?



답변

웹 스토리지에 관한 Wikipedia 기사에서 인용 :

웹 스토리지는 쿠키 개선으로 단순화되어 훨씬 더 큰 스토리지 용량을 제공 할 수 있습니다 ( Google Chrome에서 원 본당 10MB ( https://plus.google.com/u/0/+FrancoisBeaufort/posts/S5Q9HqDB8bh ), Mozilla Firefox , Opera (Internet Explorer의 저장 영역 당 10MB ) 및 더 나은 프로그래밍 인터페이스.

또한 John Resig 기사 에서 인용 한 내용 [2007 년 1 월 게시] :

저장 공간

DOM 스토리지를 사용하면 쿠키에 부과 된 일반적인 사용자 에이전트 제한보다 상당히 많은 스토리지 공간이 있음을 의미합니다. 그러나, 제공되는 양은 본 명세서에서 정의되지 않았으며, 사용자 에이전트에 의해 의미있게 브로드 캐스트되지도 않는다.

Mozilla 소스 코드를 보면 5120KB가 전체 도메인의 기본 저장소 크기임을 알 수 있습니다. 따라서 일반적인 2KB 쿠키보다 훨씬 더 많은 공간을 사용할 수 있습니다.

그러나이 저장 영역의 크기는 사용자 (5MB 저장 영역이 보장되지 않거나 암시되지 않음)와 사용자 에이전트 (예 : Opera, 예를 들어 3MB 만 제공 할 수 있지만 시간 만 알려줄 수 있음)로 사용자 정의 할 수 있습니다 . )


답변

실제로 Opera에는 5MB 제한이 없습니다. 응용 프로그램에 더 많은 것이 필요하므로 제한을 늘릴 수 있습니다. 사용자는 도메인에 대해 “무제한 스토리지”를 선택할 수도 있습니다.

localStorage 제한 / 인용을 쉽게 테스트 할 수 있습니다 .


답변

다음은 한계를 찾는 간단한 스크립트입니다.

if (localStorage && !localStorage.getItem('size')) {
    var i = 0;
    try {
        // Test up to 10 MB
        for (i = 250; i <= 10000; i += 250) {
            localStorage.setItem('test', new Array((i * 1024) + 1).join('a'));
        }
    } catch (e) {
        localStorage.removeItem('test');
        localStorage.setItem('size', i - 250);
    }
}

여기 요지 , JSFiddle블로그 게시물 .

스크립트는 브라우저에서 예외가 발생할 때까지 점점 더 큰 텍스트 문자열 설정을 테스트합니다. 이 시점에서 테스트 데이터를 지우고 크기를 킬로바이트 단위로 저장하는 localStorage에서 크기 키를 설정합니다.


답변

저장할 수있는 단일 문자열의 최대 길이 찾기 localStorage

이 스 니펫은 localStorage도메인 당 저장할 수있는 문자열의 최대 길이를 찾습니다 .

//Clear localStorage
for (var item in localStorage) delete localStorage[item];

window.result = window.result || document.getElementById('result');

result.textContent = 'Test running…';

//Start test
//Defer running so DOM can be updated with "test running" message
setTimeout(function () {

    //Variables
    var low = 0,
        high = 2e9,
        half;

    //Two billion may be a little low as a starting point, so increase if necessary
    while (canStore(high)) high *= 2;


    //Keep refining until low and high are equal
    while (low !== high) {
        half = Math.floor((high - low) / 2 + low);

        //Check if we can't scale down any further
        if (low === half || high === half) {
            console.info(low, high, half);
            //Set low to the maximum possible amount that can be stored 
            low = canStore(high) ? high : low;
            high = low;
            break;
        }


        //Check if the maximum storage is no higher than half
        if (storageMaxBetween(low, half)) {
            high = half;
            //The only other possibility is that it's higher than half but not higher than "high"
        } else {
            low = half + 1;
        }

    }

    //Show the result we found!
    result.innerHTML = 'The maximum length of a string that can be stored in localStorage is <strong>' + low + '</strong> characters.';

    //Functions
    function canStore(strLen) {
        try {
            delete localStorage.foo;
            localStorage.foo = Array(strLen + 1).join('A');
            return true;
        } catch (ex) {
            return false;
        }
    }


    function storageMaxBetween(low, high) {
        return canStore(low) && !canStore(high);
    }

}, 0);
<h1>LocalStorage single value max length test</h1>

<div id='result'>Please enable JavaScript</div>

문자열의 길이는 JavaScript에서 제한됩니다. localStorage단일 문자열로 제한되지 않을 때 저장할 수있는 최대 데이터 양을 보려면 이 답변의 코드를 사용할 수 있습니다 .

편집 : 스택 조각은 지원하지 않습니다 localStorage그래서, 여기 JSFiddle에 대한 링크입니다 .

결과

Chrome (45.0.2454.101) : 5242878 자
Firefox (40.0.1) : 5242883 자
Internet Explorer (11.0.9600.18036) :16386 122066 122070 자

Internet Explorer에서 각 실행마다 다른 결과를 얻습니다.


답변

모바일 브라우저 :

Browser    | Chrome    | Android Browser    | Firefox     | iOS Safari
Version    | 40        | 4.3                | 34          | 6-8
Available  | 10MB      | 2MB                | 10MB        | 5MB

데스크톱 브라우저 :

Browser    | Chrome   | Opera    | Firefox    | Safari      | IE
Version    | 40       | 27       | 34         | 6-8         | 9-11
Available  | 10MB     | 10MB     | 10MB       | 5MB         | 10MB

참조 링크


답변

5MB를 사용할 수 있다고 가정하지 마십시오. localStorage 용량은 브라우저에 따라 다르며 2.5MB, 5MB 및 무제한이 가장 일반적인 값입니다. 출처 : http://dev-test.nemikor.com/web-storage/support-test/


답변

큰 객체를 단일 localStorage 항목으로 문자열 화하지 않으려 고합니다. 그것은 매우 비효율적입니다. 약간의 세부 사항이 바뀔 때마다 모든 것이 구문 분석되고 다시 인코딩되어야합니다. 또한 JSON은 객체 구조 내에서 여러 개의 상호 참조를 처리 할 수 ​​없으며 생성자, 배열의 비 숫자 속성, 스파 스 항목의 내용 등 많은 세부 정보를 제거합니다.

대신 Rhaboo 를 사용할 수 있습니다 . 많은 localStorage 항목을 사용하여 큰 개체를 저장하므로 작은 변경을 신속하게 수행 할 수 있습니다. 복원 된 객체는 저장된 객체의 훨씬 정확한 사본이며 API는 매우 간단합니다. 예 :

var store = Rhaboo.persistent('Some name');
store.write('count', store.count ? store.count+1 : 1);
store.write('somethingfancy', {
  one: ['man', 'went'],
  2: 'mow',
  went: [  2, { mow: ['a', 'meadow' ] }, {}  ]
});
store.somethingfancy.went[1].mow.write(1, 'lawn');

BTW, 나는 썼다.