2012-07-23 13 views
5

मुझे रनटाइम पर HTML5 sessionStorage/localStorage का उपयोग करके किसी एप्लिकेशन द्वारा किए गए कुल आकार को खोजने का एक तरीका चाहिए।वर्तमान एप्लिकेशन द्वारा उपयोग किए गए कुल एचटीएमएल 5 स्टोरेज आकार को कैसे प्राप्त करें

मैं प्रोफाइलर-आधारित दृष्टिकोण नहीं चाहता हूं।

क्या मैं वर्तमान में कर रहा हूँ है -

var data = 0; 
for(var v in window.sessionStorage){ 
data += window.sessionStorage.getItem(v); 
} 

console.log(data);//.length to get char length 

और फिर मैं एक पाठ-फाइल में यह मान कॉपी-पेस्ट और आकार की जाँच करें।

बदसूरत और अभी भी मेरी मदद नहीं करता है। क्या एचटीएमएल 5 एपीआई में कोई तरीका है (कोई तरीका) जिसमें यह अंतर्निहित है?

धन्यवाद।

+0

चूंकि यह 'डेटा। लम्बाई' को स्ट्रिंग किया गया है, कम से कम आपको वर्णों की संख्या देना चाहिए। – Christoph

+0

@ क्रिस्टोफ: हाँ, जैसा कि मैंने पहले ही अपने प्रश्न में उल्लेख किया है। क्या आप प्रति चरित्र कुछ अनुमानित बाइट वेटेज द्वारा इसे गुणा करने का सुझाव दे रहे हैं? –

उत्तर

11

नहीं, क्रॉस ब्राउज़र नहीं। आईई सॉर्ट has it, अन्य नहीं। लेकिन निश्चित रूप से, शेष डोमेन पर शेष आकार की गणना की जा सकती है। उदाहरण नीचे देखें।

केवल IE के लिए:

var remSpace = window.localStorage.remainingSpace; 

एफएफ/क्रोम/सफारी के लिए:

var limit = 1024 * 1024 * 5; // 5 MB 
var remSpace = limit - unescape(encodeURIComponent(JSON.stringify(localStorage))).length; 

ओपेरा: 5 एमबी मानक है, लेकिन ब्राउज़र सीमा बढ़ाने के लिए के रूप में अनुप्रयोगों और अधिक स्थान की आवश्यकता होती है प्रदान करता है।

+0

नीट :) मैं इसके साथ रह सकता हूं क्योंकि मुझे उम्मीद है कि यह 5 एमबी से अधिक न हो। –

+0

समस्या यह है कि कुल मेमोरी 5 एमबी मानी जाती है, लेकिन आप इसे बढ़ाने के लिए एफएफ को उदाहरण के लिए ट्विक कर सकते हैं। –

+0

लेकिन सीमा क्रोमियम में 10 एमबी लगती है। संदर्भ लें: पोस्ट करने के लिए धन्यवाद https://cs.chromium.org/chromium/src/content/common/dom_storage/dom_storage_types.h?dr=C&l=24 – venkatvb

0

मुझे इस समस्या का अपना समाधान खोजने का प्रयास करते हुए यह प्रश्न मिला और मैं कहां से समाप्त हुआ, यह साझा करना चाहता था, अगर यह दूसरों के लिए उपयोगी साबित हो।

इसका संक्षिप्त, यह है कि जब मैं स्थानीय स्टोरेज में कोई मान जोड़ता हूं, तो मैंने अपनी कुंजी को सरणी में रखा है। फिर, स्थानीय स्टोरेज में कुछ और लिखने से पहले, मैं चाबियों के माध्यम से लूप करता हूं और यह सुनिश्चित करने के लिए अपनी लंबाई का योग प्राप्त करता हूं कि मैं उस थ्रेसहोल्ड पर नहीं हूं जिसे मैं सहज महसूस करता हूं।

यदि स्थानीय स्टोरेज 2 एमबी (इस मामले में) से बड़ा है, तो यह स्थानीय स्टोरेज से पहले आइटम को हटा देता है, सरणी से उस प्रविष्टि को हटा देता है, और फिर नई प्रविष्टि लिखता है।

// check the size of localStorage 

var localStorageArray = []; 
var localStorageSize = 0; 

for (var i=0; i < localStorageArray.length; i++) { 
    localStorageSize += localStorage.getItem(localStorageArray[i]).length; 
} 

// save to localStorage if it has not been saved already 

if (!localStorage.getItem(key)){ 
    if (localStorageSize < 2000000) { 
     localStorage.setItem(key, value); 
     localStorageArray.push(key); 
    } else { 
     localStorage.removeItem(localStorageArray[0]); 
     localStorageArray.shift(); 
     localStorage.setItem(key, value); 
     localStorageArray.push(key); 
    } 
} 
+0

धन्यवाद। लेकिन क्या यह जांच नहीं है कि 2 मिलियन 'मूल्य' वर्ण हैं? 'कुंजी' के आकार के बारे में क्या? मुझे '1024 * 1024 * 2' (2 एमबी के लिए) के खिलाफ जांच नहीं करनी चाहिए? –